From 42cbe2ce22da32b312d676d83ec767b96a842a8c Mon Sep 17 00:00:00 2001 From: Crisciany Souza Date: Wed, 24 Sep 2025 17:30:43 -0400 Subject: [PATCH 1/9] chore: adjustment in the filters modified and status Signed-off-by: Crisciany Souza --- lib/Controller/PageController.php | 1 + lib/Service/AccountService.php | 13 +++++++++---- src/store/filters.js | 16 ++++++++++++++-- .../FilesList/FileListFilter/FileListFilter.vue | 5 +++++ .../FileListFilter/FileListFilterModified.vue | 8 +++++++- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index a6f739b0a..ec7b0c1fc 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -83,6 +83,7 @@ class PageController extends AEnvironmentPageAwareController { #[FrontpageRoute(verb: 'GET', url: '/')] public function index(): TemplateResponse { $this->initialState->provideInitialState('config', $this->accountService->getConfig($this->userSession->getUser())); + $this->initialState->provideInitialState('filters', $this->accountService->getConfigFilters($this->userSession->getUser())); $this->initialState->provideInitialState('certificate_engine', $this->accountService->getCertificateEngineName()); try { diff --git a/lib/Service/AccountService.php b/lib/Service/AccountService.php index 694d3b53c..5341d5ebf 100644 --- a/lib/Service/AccountService.php +++ b/lib/Service/AccountService.php @@ -194,16 +194,21 @@ class AccountService { $info['hasSignatureFile'] = $this->hasSignatureFile($user); $info['phoneNumber'] = $this->getPhoneNumber($user); $info['isApprover'] = $this->validateHelper->userCanApproveValidationDocuments($user, false); - $info['grid_view'] = $this->getUserConfigGridView($user); $info['id_docs_filters'] = $this->getUserConfigIdDocsFilters($user); $info['id_docs_sort'] = $this->getUserConfigIdDocsSort($user); $info['crl_filters'] = $this->getUserConfigCrlFilters($user); $info['crl_sort'] = $this->getUserConfigCrlSort($user); + $info['grid_view'] = $this->getUserConfigByKey($user, 'grid_view') === '1'; return array_filter($info); } + public function getConfigFilters(?IUser $user = null): array { + $info['filter_modified'] = $this->getUserConfigByKey($user, 'filter_modified'); + $info['filter_status'] = $this->getUserConfigByKey($user, 'filter_status'); + return $info; + } private function updateIdentifyMethodToAccount(int $signRequestId, string $email, string $uid): void { $identifyMethods = $this->identifyMethodService->getIdentifyMethodsFromSignRequestId($signRequestId); @@ -241,12 +246,12 @@ class AccountService { } } - private function getUserConfigGridView(?IUser $user = null): bool { + private function getUserConfigByKey(?IUser $user = null, string $key): string { if (!$user) { - return false; + return ''; } - return $this->config->getUserValue($user->getUID(), Application::APP_ID, 'grid_view', false) === '1'; + return $this->config->getUserValue($user->getUID(), Application::APP_ID, $key); } private function getUserConfigIdDocsFilters(?IUser $user = null): array { diff --git a/src/store/filters.js b/src/store/filters.js index 750d1f694..eb94efb04 100644 --- a/src/store/filters.js +++ b/src/store/filters.js @@ -6,12 +6,16 @@ import { defineStore } from 'pinia' import { emit } from '@nextcloud/event-bus' - +import { loadState } from '@nextcloud/initial-state' +import axios from '@nextcloud/axios' +import { generateOcsUrl } from '@nextcloud/router' import logger from '../helpers/logger.js' export const useFiltersStore = defineStore('filter', { state: () => ({ chips: {}, + filter_modified: loadState('libresign', 'filters', { filter_modified: '' }).filter_modified, + filter_status: loadState('libresign', 'filters', { filter_status: '' }).filter_status, }), getters: { @@ -21,8 +25,16 @@ export const useFiltersStore = defineStore('filter', { }, actions: { - onFilterUpdateChips(event) { + async onFilterUpdateChips(event) { this.chips = { ...this.chips, [event.id]: [...event.detail] } + let value = this.chips['modified'][0]?.id; + + await axios.put(generateOcsUrl('/apps/libresign/api/v1/account/config/{key}', { key: 'filter_modified' }), { + value, + }) + + console.log(loadState('libresign', 'filters', {})) + emit('libresign:filters:update') logger.debug('File list filter chips updated', { chips: event.detail }) }, diff --git a/src/views/FilesList/FileListFilter/FileListFilter.vue b/src/views/FilesList/FileListFilter/FileListFilter.vue index cd8d7e242..5e245a7d4 100644 --- a/src/views/FilesList/FileListFilter/FileListFilter.vue +++ b/src/views/FilesList/FileListFilter/FileListFilter.vue @@ -18,6 +18,11 @@ @click="$emit('reset-filter')"> {{ t('files', 'Clear filter') }} + + {{ t('files', 'Set marked filter') }} + diff --git a/src/views/FilesList/FileListFilter/FileListFilterModified.vue b/src/views/FilesList/FileListFilter/FileListFilterModified.vue index 15b26a6aa..9415f9ff2 100644 --- a/src/views/FilesList/FileListFilter/FileListFilterModified.vue +++ b/src/views/FilesList/FileListFilter/FileListFilterModified.vue @@ -51,7 +51,7 @@ export default { }, data() { return { - selectedOption: null, + selectedOption: this.filtersStore.filter_modified || null, timePresets: [ { id: 'today', @@ -94,6 +94,11 @@ export default { return this.timePresets.find(({ id }) => id === this.selectedOption) ?? null }, }, + mounted() { + if (this.selectedOption) { + this.setPreset(this.currentPreset) + } + }, watch: { selectedOption() { if (this.selectedOption === null) { @@ -114,6 +119,7 @@ export default { end: preset.end, icon: calendarSvg, text: preset.label, + id: preset.id, onclick: () => this.setPreset(), }) } else { From c7c6ffbc9d88eb3c6c040159bff929a8ef66d025 Mon Sep 17 00:00:00 2001 From: Crisciany Souza Date: Tue, 21 Oct 2025 10:48:03 -0400 Subject: [PATCH 2/9] chore: adjustment error filter Signed-off-by: Crisciany Souza --- lib/Db/SignRequestMapper.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Db/SignRequestMapper.php b/lib/Db/SignRequestMapper.php index 91fb8bb04..a0e663d33 100644 --- a/lib/Db/SignRequestMapper.php +++ b/lib/Db/SignRequestMapper.php @@ -554,13 +554,15 @@ class SignRequestMapper extends QBMapper { ); } if (!empty($filter['start'])) { + $start = (new \DateTime('@'.$filter['start']))->format('Y-m-d H:i:s'); $qb->andWhere( - $qb->expr()->gte('f.created_at', $qb->createNamedParameter($filter['start'], IQueryBuilder::PARAM_INT)) + $qb->expr()->gte('f.created_at', $qb->createNamedParameter($start, IQueryBuilder::PARAM_STR)) ); } if (!empty($filter['end'])) { + $end = (new \DateTime('@'.$filter['end']))->format('Y-m-d H:i:s'); $qb->andWhere( - $qb->expr()->lte('f.created_at', $qb->createNamedParameter($filter['end'], IQueryBuilder::PARAM_INT)) + $qb->expr()->lte('f.created_at', $qb->createNamedParameter($end, IQueryBuilder::PARAM_STR)) ); } } From 755b8e7b4af6fe8ce85bb950aad2ec2daf97e038 Mon Sep 17 00:00:00 2001 From: Crisciany Souza Date: Wed, 22 Oct 2025 17:27:11 -0400 Subject: [PATCH 3/9] chore: modified filter with save option Signed-off-by: Crisciany Souza --- lib/Db/SignRequestMapper.php | 4 +-- src/store/filters.js | 13 ++++++++- .../FileListFilter/FileListFilter.vue | 2 +- .../FileListFilter/FileListFilterModified.vue | 27 ++++++++++++++++++- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/lib/Db/SignRequestMapper.php b/lib/Db/SignRequestMapper.php index a0e663d33..e3e4d734a 100644 --- a/lib/Db/SignRequestMapper.php +++ b/lib/Db/SignRequestMapper.php @@ -554,13 +554,13 @@ class SignRequestMapper extends QBMapper { ); } if (!empty($filter['start'])) { - $start = (new \DateTime('@'.$filter['start']))->format('Y-m-d H:i:s'); + $start = (new \DateTime('@' . $filter['start'], new \DateTimeZone('UTC')))->format('Y-m-d H:i:s'); $qb->andWhere( $qb->expr()->gte('f.created_at', $qb->createNamedParameter($start, IQueryBuilder::PARAM_STR)) ); } if (!empty($filter['end'])) { - $end = (new \DateTime('@'.$filter['end']))->format('Y-m-d H:i:s'); + $end = (new \DateTime('@' . $filter['end'], new \DateTimeZone('UTC')))->format('Y-m-d H:i:s'); $qb->andWhere( $qb->expr()->lte('f.created_at', $qb->createNamedParameter($end, IQueryBuilder::PARAM_STR)) ); diff --git a/src/store/filters.js b/src/store/filters.js index eb94efb04..bd2a8acaf 100644 --- a/src/store/filters.js +++ b/src/store/filters.js @@ -27,7 +27,16 @@ export const useFiltersStore = defineStore('filter', { actions: { async onFilterUpdateChips(event) { this.chips = { ...this.chips, [event.id]: [...event.detail] } - let value = this.chips['modified'][0]?.id; + + emit('libresign:filters:update') + logger.debug('File list filter chips updated', { chips: event.detail }) + + console.log('onFilterUpdateChips') + }, + + async onFilterUpdateChipsAndSave(event) { + this.chips = { ...this.chips, [event.id]: [...event.detail] } + let value = this.chips['modified'][0]?.id || ''; await axios.put(generateOcsUrl('/apps/libresign/api/v1/account/config/{key}', { key: 'filter_modified' }), { value, @@ -37,6 +46,8 @@ export const useFiltersStore = defineStore('filter', { emit('libresign:filters:update') logger.debug('File list filter chips updated', { chips: event.detail }) + + console.log('onFilterUpdateChipsAndSave') }, }, }) diff --git a/src/views/FilesList/FileListFilter/FileListFilter.vue b/src/views/FilesList/FileListFilter/FileListFilter.vue index 5e245a7d4..62e354bcd 100644 --- a/src/views/FilesList/FileListFilter/FileListFilter.vue +++ b/src/views/FilesList/FileListFilter/FileListFilter.vue @@ -20,7 +20,7 @@ + @click="$emit('set-marked-filter')"> {{ t('files', 'Set marked filter') }} diff --git a/src/views/FilesList/FileListFilter/FileListFilterModified.vue b/src/views/FilesList/FileListFilter/FileListFilterModified.vue index 9415f9ff2..5162dd1e3 100644 --- a/src/views/FilesList/FileListFilter/FileListFilterModified.vue +++ b/src/views/FilesList/FileListFilter/FileListFilterModified.vue @@ -5,7 +5,8 @@ From cdad1a68ee96c8baa53f8580eeec7aedd06635c9 Mon Sep 17 00:00:00 2001 From: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> Date: Mon, 8 Dec 2025 12:46:30 -0300 Subject: [PATCH 8/9] chore: improve class name and remove the red class from save Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com> --- src/views/FilesList/FileListFilter/FileListFilter.vue | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/views/FilesList/FileListFilter/FileListFilter.vue b/src/views/FilesList/FileListFilter/FileListFilter.vue index b007f1de6..ebf47573e 100644 --- a/src/views/FilesList/FileListFilter/FileListFilter.vue +++ b/src/views/FilesList/FileListFilter/FileListFilter.vue @@ -18,8 +18,7 @@ @click="$emit('reset-filter')"> {{ t('files', 'Clear filter') }} - {{ t('files', 'Save filter') }} @@ -53,8 +52,10 @@ export default {