From bf9bb3286713516a0dff04d484cde9c3a0623b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Viricel?= Date: Mon, 22 Apr 2024 17:41:16 +0200 Subject: [PATCH 01/11] chore: use custom fetch and nuxt state for data fetching #57 --- pages/[project]/changes_logs.vue | 37 +++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/pages/[project]/changes_logs.vue b/pages/[project]/changes_logs.vue index 8992753..4096af6 100644 --- a/pages/[project]/changes_logs.vue +++ b/pages/[project]/changes_logs.vue @@ -1,10 +1,5 @@ From 5a48e116b3f017b8849d0c7a6708473cdd087b1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Viricel?= Date: Mon, 22 Apr 2024 18:54:38 +0200 Subject: [PATCH 03/11] feat: create log-filters components #57 --- components/LogFilters.vue | 196 ++++++++++++++++++++++++ components/Logs.vue | 252 ++----------------------------- pages/[project]/changes_logs.vue | 1 + 3 files changed, 211 insertions(+), 238 deletions(-) create mode 100644 components/LogFilters.vue diff --git a/components/LogFilters.vue b/components/LogFilters.vue new file mode 100644 index 0000000..44e59c7 --- /dev/null +++ b/components/LogFilters.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/components/Logs.vue b/components/Logs.vue index a1e9fef..ff39826 100644 --- a/components/Logs.vue +++ b/components/Logs.vue @@ -24,23 +24,9 @@ export default defineNuxtComponent({ }, data(): { - filterByAction?: string - filterByUserGroups?: string - filterBySelectors?: string[] - filterByUsers?: string - filterByDate?: string scroolCount: number } { return { - filterByAction: this.$route.query.filterByAction as string | undefined, - filterByUserGroups: this.$route.query.filterByUserGroups as - | string - | undefined, - filterBySelectors: this.$route.query.filterBySelectors as - | string[] - | undefined, - filterByUsers: this.$route.query.filterByUsers as string | undefined, - filterByDate: this.$route.query.filterByDate as string | undefined, scroolCount: 10, } }, @@ -51,106 +37,44 @@ export default defineNuxtComponent({ return { user } }, - watch: { - filterByAction() { - this.updateUrl() - }, - filterByUserGroups() { - this.updateUrl() - }, - filterBySelectors() { - this.updateUrl() - }, - filterByUsers() { - this.updateUrl() - }, - filterByDate() { - this.updateUrl() - }, - }, - emits: { removeLogs: (_objectIds: ObjectId[]) => true, }, computed: { - stats(): [string, number][] { - const actions = this.logs - .map((log) => - _.uniq( - [ - ...Object.values(log.diff_attribs || {}), - ...Object.values(log.diff_tags || {}), - ] - .flat(1) - .map((action) => action[0]), - ), - ) - .flat(1) - return this.count(actions) - }, - - statSelectors() { - const matches = this.logs.map((log) => _.uniq(log.matches).flat()).flat(1) - return this.count(matches, (m) => m.selectors.join(';')) - }, - - statUserGroups() { - const userGroups = this.logs - .map((log) => _.uniq(log.matches.map((m) => m.user_groups).flat(2))) - .flat(1) - return this.count(userGroups) - }, - - statUsers() { - const users = this.logs - .map((log) => - (log.base ? log.changesets.slice(1) : log.changesets).map( - (changeset) => changeset.user, - ), - ) - .flat(2) - return this.count(users) - }, - - statDates() { - const dates = this.logs.map((log) => log.change.created.substring(0, 10)) - return this.count(dates).sort() - }, - logsWithFilter() { return this.logs.filter((log) => { const changesetsUsers - = this.filterByUsers !== undefined + = this.$route.query.filterByUsers !== undefined && _.uniq( (log.base ? log.changesets.slice(1) : log.changesets).map( (changeset) => changeset.user, ), ) return ( - (this.filterByAction === undefined + (this.$route.query.filterByAction === undefined || Object.values(log.diff_attribs || {}) .concat(Object.values(log.diff_tags || {})) .some( (actions) => actions?.some( - (action) => action[0] === this.filterByAction, + (action) => action[0] === this.$route.query.filterByAction, ) || false, )) - && (this.filterByUserGroups === undefined + && (this.$route.query.filterByUserGroups === undefined || log.matches.some((match) => - match.user_groups.includes(this.filterByUserGroups!), + match.user_groups.includes(this.$route.query.filterByUserGroups as string), )) - && (this.filterBySelectors === undefined + && (this.$route.query.filterBySelectors === undefined || log.matches.some((match) => this.matchFilterBySelectors(match.selectors), )) - && (this.filterByUsers === undefined + && (this.$route.query.filterByUsers === undefined || (changesetsUsers && changesetsUsers.length === 1 - && changesetsUsers[0] === this.filterByUsers)) - && (this.filterByDate === undefined - || log.change.created.substring(0, 10) === this.filterByDate) + && changesetsUsers[0] === this.$route.query.filterByUsers)) + && (this.$route.query.filterByDate === undefined + || log.change.created.substring(0, 10) === this.$route.query.filterByDate) ) }) }, @@ -161,17 +85,6 @@ export default defineNuxtComponent({ }, methods: { - count( - data: Type[], - key: (o: Type) => string = (i) => `${i}`, - ): [Type, number][] { - const index = _.indexBy(data, key) - return _.sortBy( - Object.entries(_.countBy(data, key)) as [string, number][], - ([_key, count]) => -count, - ).map(([key, count]) => [index[key], count]) - }, - accept(objectIds: ObjectId[]) { setLogs(useRuntimeConfig().public.API, this.project, 'accept', objectIds) .then(() => this.$emit('removeLogs', objectIds)) @@ -192,11 +105,7 @@ export default defineNuxtComponent({ }, reset_filter() { - this.filterByAction = undefined - this.filterByUserGroups = undefined - this.filterBySelectors = undefined - this.filterByUsers = undefined - this.filterByDate = undefined + this.$router.replace({ ...this.$route, query: undefined }) }, validate_selection() { @@ -208,24 +117,10 @@ export default defineNuxtComponent({ this.scroolCount += 10 }, - updateUrl(): void { - this.$router.replace({ - name: this.$route.name || undefined, - query: { - ...this.$route.query, - filterByAction: this.filterByAction, - filterByUserGroups: this.filterByUserGroups, - filterBySelectors: this.filterBySelectors, - filterByUsers: this.filterByUsers, - filterByDate: this.filterByDate, - }, - }) - }, - matchFilterBySelectors(selectors: string[]): boolean { return ( - this.filterBySelectors !== undefined - && _.intersection(selectors, this.filterBySelectors).length > 0 + this.$route.query.filterBySelectors !== undefined + && _.intersection(selectors, this.$route.query.filterBySelectors as string).length > 0 ) }, }, @@ -234,127 +129,8 @@ export default defineNuxtComponent({