summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/repository
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/repository')
-rw-r--r--app/assets/javascripts/repository/components/last_commit.vue30
-rw-r--r--app/assets/javascripts/repository/components/tree_content.vue5
-rw-r--r--app/assets/javascripts/repository/index.js8
-rw-r--r--app/assets/javascripts/repository/log_tree.js22
4 files changed, 37 insertions, 28 deletions
diff --git a/app/assets/javascripts/repository/components/last_commit.vue b/app/assets/javascripts/repository/components/last_commit.vue
index 59831890a4e..3e87833f7f5 100644
--- a/app/assets/javascripts/repository/components/last_commit.vue
+++ b/app/assets/javascripts/repository/components/last_commit.vue
@@ -1,6 +1,6 @@
<script>
/* eslint-disable vue/no-v-html */
-import { GlTooltipDirective, GlLink, GlDeprecatedButton, GlLoadingIcon, GlIcon } from '@gitlab/ui';
+import { GlTooltipDirective, GlLink, GlButton, GlButtonGroup, GlLoadingIcon } from '@gitlab/ui';
import defaultAvatarUrl from 'images/no_avatar.png';
import { sprintf, s__ } from '~/locale';
import UserAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue';
@@ -13,13 +13,13 @@ import pathLastCommitQuery from '../queries/path_last_commit.query.graphql';
export default {
components: {
- GlIcon,
UserAvatarLink,
TimeagoTooltip,
ClipboardButton,
CiIcon,
+ GlButton,
+ GlButtonGroup,
GlLink,
- GlDeprecatedButton,
GlLoadingIcon,
},
directives: {
@@ -123,15 +123,14 @@ export default {
class="commit-row-message item-title"
v-html="commit.titleHtml"
/>
- <gl-deprecated-button
+ <gl-button
v-if="commit.descriptionHtml"
:class="{ open: showDescription }"
:aria-label="__('Show commit description')"
- class="text-expander"
+ class="text-expander gl-vertical-align-bottom!"
+ icon="ellipsis_h"
@click="toggleShowDescription"
- >
- <gl-icon name="ellipsis_h" :size="10" />
- </gl-deprecated-button>
+ />
<div class="committer">
<gl-link
v-if="commit.author"
@@ -169,16 +168,19 @@ export default {
/>
</gl-link>
</div>
- <div class="commit-sha-group d-flex">
- <div class="label label-monospace monospace">
- {{ showCommitId }}
- </div>
+ <gl-button-group class="gl-ml-4 js-commit-sha-group">
+ <gl-button
+ label
+ class="gl-font-monospace"
+ data-testid="last-commit-id-label"
+ v-text="showCommitId"
+ />
<clipboard-button
:text="commit.sha"
:title="__('Copy commit SHA')"
- tooltip-placement="bottom"
+ class="input-group-text"
/>
- </div>
+ </gl-button-group>
</div>
</div>
</template>
diff --git a/app/assets/javascripts/repository/components/tree_content.vue b/app/assets/javascripts/repository/components/tree_content.vue
index 365b6cbb550..78b8baaa75e 100644
--- a/app/assets/javascripts/repository/components/tree_content.vue
+++ b/app/assets/javascripts/repository/components/tree_content.vue
@@ -75,6 +75,7 @@ export default {
},
methods: {
fetchFiles() {
+ const originalPath = this.path || '/';
this.isLoadingFiles = true;
return this.$apollo
@@ -83,14 +84,14 @@ export default {
variables: {
projectPath: this.projectPath,
ref: this.ref,
- path: this.path || '/',
+ path: originalPath,
nextPageCursor: this.nextPageCursor,
pageSize: this.pageSize,
},
})
.then(({ data }) => {
if (data.errors) throw data.errors;
- if (!data?.project?.repository) return;
+ if (!data?.project?.repository || originalPath !== (this.path || '/')) return;
const pageInfo = this.hasNextPage(data.project.repository.tree);
diff --git a/app/assets/javascripts/repository/index.js b/app/assets/javascripts/repository/index.js
index 7f72524b6fe..65da8f70b40 100644
--- a/app/assets/javascripts/repository/index.js
+++ b/app/assets/javascripts/repository/index.js
@@ -113,9 +113,10 @@ export default function setupVueRepositoryList() {
const webIdeLinkEl = document.getElementById('js-tree-web-ide-link');
if (webIdeLinkEl) {
- const { ideBasePath, ...options } = convertObjectPropsToCamelCase(
- JSON.parse(webIdeLinkEl.dataset.options),
- );
+ const {
+ webIdeUrlData: { path: ideBasePath, isFork: webIdeIsFork },
+ ...options
+ } = convertObjectPropsToCamelCase(JSON.parse(webIdeLinkEl.dataset.options), { deep: true });
// eslint-disable-next-line no-new
new Vue({
@@ -127,6 +128,7 @@ export default function setupVueRepositoryList() {
webIdeUrl: webIDEUrl(
joinPaths('/', ideBasePath, 'edit', ref, '-', this.$route.params.path || '', '/'),
),
+ webIdeIsFork,
...options,
},
});
diff --git a/app/assets/javascripts/repository/log_tree.js b/app/assets/javascripts/repository/log_tree.js
index 361e0b62bb7..fc8fa40a855 100644
--- a/app/assets/javascripts/repository/log_tree.js
+++ b/app/assets/javascripts/repository/log_tree.js
@@ -5,8 +5,8 @@ import commitsQuery from './queries/commits.query.graphql';
import projectPathQuery from './queries/project_path.query.graphql';
import refQuery from './queries/ref.query.graphql';
-let fetchpromise;
-let resolvers = [];
+const fetchpromises = {};
+const resolvers = {};
export function resolveCommit(commits, path, { resolve, entry }) {
const commit = commits.find(c => c.filePath === `${path}/${entry.name}` && c.type === entry.type);
@@ -18,15 +18,19 @@ export function resolveCommit(commits, path, { resolve, entry }) {
export function fetchLogsTree(client, path, offset, resolver = null) {
if (resolver) {
- resolvers.push(resolver);
+ if (!resolvers[path]) {
+ resolvers[path] = [resolver];
+ } else {
+ resolvers[path].push(resolver);
+ }
}
- if (fetchpromise) return fetchpromise;
+ if (fetchpromises[path]) return fetchpromises[path];
const { projectPath } = client.readQuery({ query: projectPathQuery });
const { escapedRef } = client.readQuery({ query: refQuery });
- fetchpromise = axios
+ fetchpromises[path] = axios
.get(
`${gon.relative_url_root}/${projectPath}/-/refs/${escapedRef}/logs_tree/${encodeURIComponent(
path.replace(/^\//, ''),
@@ -46,16 +50,16 @@ export function fetchLogsTree(client, path, offset, resolver = null) {
data,
});
- resolvers.forEach(r => resolveCommit(data.commits, path, r));
+ resolvers[path].forEach(r => resolveCommit(data.commits, path, r));
- fetchpromise = null;
+ delete fetchpromises[path];
if (headerLogsOffset) {
fetchLogsTree(client, path, headerLogsOffset);
} else {
- resolvers = [];
+ delete resolvers[path];
}
});
- return fetchpromise;
+ return fetchpromises[path];
}