diff --git a/ppr-ui/package-lock.json b/ppr-ui/package-lock.json index 42aaedc04..1355d8cd9 100644 --- a/ppr-ui/package-lock.json +++ b/ppr-ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "ppr-ui", - "version": "2.0.9", + "version": "2.0.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ppr-ui", - "version": "2.0.9", + "version": "2.0.10", "dependencies": { "@bcrs-shared-components/corp-type-module": "^1.0.7", "@bcrs-shared-components/enums": "^1.0.19", diff --git a/ppr-ui/package.json b/ppr-ui/package.json index 9db2a54f7..2a03d7040 100644 --- a/ppr-ui/package.json +++ b/ppr-ui/package.json @@ -1,6 +1,6 @@ { "name": "ppr-ui", - "version": "2.0.9", + "version": "2.0.10", "private": true, "appName": "Assets UI", "sbcName": "SBC Common Components", diff --git a/ppr-ui/src/components/common/RegistrationsWrapper.vue b/ppr-ui/src/components/common/RegistrationsWrapper.vue index fcfada875..46202699f 100644 --- a/ppr-ui/src/components/common/RegistrationsWrapper.vue +++ b/ppr-ui/src/components/common/RegistrationsWrapper.vue @@ -910,7 +910,7 @@ export default defineComponent({ if (parentIndex === -1) { // reg was a child of a new base reg so we are adding the full base reg newRegSummary.expand = true - baseRegs.unshift(newRegSummary) + baseRegs.unshift({ ...newRegSummary, expand: false }) setRegTableBaseRegs([...baseRegs]) setRegTableTotalRowCount(getRegTableTotalRowCount.value + 1) } else { @@ -958,7 +958,7 @@ export default defineComponent({ if (baseRegs.some(reg => reg.registrationNumber === newRegSummary.registrationNumber)) return // new base reg - baseRegs.unshift(newRegSummary) + baseRegs.unshift({ ...newRegSummary, expand: false }) setRegTableBaseRegs([...baseRegs]) if (!val.prevDraft) { // not from a draft so increase diff --git a/ppr-ui/src/components/tables/RegistrationTable.vue b/ppr-ui/src/components/tables/RegistrationTable.vue index e4db5fee7..7ee64a95a 100644 --- a/ppr-ui/src/components/tables/RegistrationTable.vue +++ b/ppr-ui/src/components/tables/RegistrationTable.vue @@ -9,7 +9,7 @@ @submit="updateDateRange($event)" /> - - @@ -296,8 +303,8 @@ import flushPromises from 'flush-promises' import _ from 'lodash' import { DatePicker } from '@/components/common' import RegistrationBarTypeAheadList from '@/components/registration/RegistrationBarTypeAheadList.vue' -import { TableObserver, TableRow } from './common' /* eslint-disable no-unused-vars */ +import { SortingIcon, TableObserver, TableRow } from './common' import { RegistrationSummaryIF, AccountProductSubscriptionIF, @@ -319,9 +326,11 @@ import { import { useRegistration } from '@/composables/useRegistration' import { MHRegistrationTypes, RegistrationTypesStandard, StatusTypes, MhStatusTypes } from '@/resources' import { storeToRefs } from 'pinia' +import { useTableFeatures } from '@/composables' export default defineComponent({ components: { + SortingIcon, DatePicker, RegistrationBarTypeAheadList, TableObserver, @@ -354,7 +363,9 @@ export default defineComponent({ default: '' }, setRegistrationHistory: { - default: [] as (RegistrationSummaryIF | DraftResultIF)[] + default: () => [], + // To fix: Vue3 supports TS in templates + type: Array as () => RegistrationSummaryIF | DraftResultIF | MhrDraftIF | any }, setSort: { type: Object as () => RegistrationSortIF, @@ -420,12 +431,14 @@ export default defineComponent({ dateTxt, clearFilters } = useRegistration(props.setSort) + const { sortDates } = useTableFeatures() const localState = reactive({ expanded: [], freezeTableScroll: false, loadingPDF: '', overrideWidth: false, + sortAsc: false, registrationTypes: [...RegistrationTypesStandard].slice(1), mhrRegistrationTypes: [...MHRegistrationTypes].slice(1), showDatePicker: false, @@ -449,7 +462,6 @@ export default defineComponent({ return props.setMorePages }), newReg: computed(() => { return props.setNewRegItem }), - registrationHistory: computed(() => { return props.setRegistrationHistory }), search: computed(() => { return props.setSearch }), tableFiltersActive: computed((): boolean => { return !!(dateTxt.value || registrationNumber.value || registrationType.value || @@ -502,16 +514,16 @@ export default defineComponent({ } const isFirstItem = (item: RegistrationSummaryIF | DraftResultIF): boolean => { - const firstBaseReg = localState.registrationHistory[0].baseRegistrationNumber - const firstDocId = localState.registrationHistory[0].documentId + const firstBaseReg = props.setRegistrationHistory[0].baseRegistrationNumber + const firstDocId = props.setRegistrationHistory[0].documentId return item.baseRegistrationNumber ? item.baseRegistrationNumber === firstBaseReg : (item as DraftResultIF).documentId === firstDocId } const isFirstItemMhr = (item: MhRegistrationSummaryIF | MhrDraftIF): boolean => { - const firstMhrNumber = localState.registrationHistory[0].mhrNumber - const firstDocId = localState.registrationHistory[0].draftNumber + const firstMhrNumber = props.setRegistrationHistory[0].mhrNumber + const firstDocId = props.setRegistrationHistory[0].draftNumber return item.mhrNumber ? item.mhrNumber === firstMhrNumber : item.draftNumber === firstDocId @@ -601,9 +613,15 @@ export default defineComponent({ registrationType.value = val?.registrationTypeAPI || '' } + /** Date sort handler to sort and change sort icon state **/ + const dateSortHandler = (registrationHistory: Array, dateType: string, reverse: boolean) => { + localState.sortAsc = !localState.sortAsc + sortDates(registrationHistory, dateType, reverse) + } + const getNext = _.throttle(() => { // if not loading and reg history exists - if (!localState.loadingData && localState.registrationHistory?.length > 0) { + if (!localState.loadingData && props.setRegistrationHistory?.length > 0) { emit('getNext') } }, 500, { trailing: false }) @@ -692,6 +710,7 @@ export default defineComponent({ }) return { + dateSortHandler, datePicker, dateTxt, emitError, diff --git a/ppr-ui/src/components/tables/common/TableRow.vue b/ppr-ui/src/components/tables/common/TableRow.vue index cdd93030a..02491c43a 100644 --- a/ppr-ui/src/components/tables/common/TableRow.vue +++ b/ppr-ui/src/components/tables/common/TableRow.vue @@ -10,7 +10,7 @@ > @@ -23,7 +23,7 @@ @mouseover="rollover = true" @mouseleave="rollover = false" > - mdi-chevron-up + mdi-chevron-up mdi-chevron-down @@ -86,23 +86,23 @@
{{ item.registrationDescription }} - -
- The records for this registration were converted from paper to digital format on November 14, 1995, and may - not contain the full history of transactions prior to the conversion date. -
-
+ v-if="item.registrationDescription === APIMhrDescriptionTypes.CONVERTED" + class="pa-2" + content-class="top-tooltip" + nudge-right="2" + top + transition="fade-transition" + > + +
+ The records for this registration were converted from paper to digital format on November 14, 1995, and may + not contain the full history of transactions prior to the conversion date. +
+
@@ -436,7 +436,13 @@ import { getRegistrationSummary, mhRegistrationPDF, registrationPDF, stripChars import { useStore } from '@/store/store' import InfoChip from '@/components/common/InfoChip.vue' /* eslint-disable no-unused-vars */ -import { BaseHeaderIF, DraftResultIF, MhRegistrationSummaryIF, RegistrationSummaryIF } from '@/interfaces' +import { + BaseHeaderIF, + DraftResultIF, + MhRegistrationSummaryIF, + RegistrationSummaryIF, + RegTableNewItemI +} from '@/interfaces' /* eslint-enable no-unused-vars */ import { APIMhrDescriptionTypes, @@ -464,7 +470,10 @@ export default defineComponent({ setChild: { default: false }, setHeaders: { default: [] as BaseHeaderIF[] }, setIsExpanded: { default: false }, - setItem: { default: {} as (RegistrationSummaryIF | DraftResultIF) } + setItem: { + default: () => {}, + type: Object as () => RegistrationSummaryIF | DraftResultIF | MhRegistrationSummaryIF | any + } }, emits: ['action', 'error', 'freezeScroll', 'toggleExpand'], setup (props, { emit }) { @@ -496,7 +505,7 @@ export default defineComponent({ return props.setAddRegEffect }), applyRolloverEffect: computed((): boolean => { - return localState.rollover || localState.isExpanded + return localState.rollover || props.setIsExpanded }), disableActionShadow: computed((): boolean => { return props.setDisableActionShadow @@ -507,10 +516,7 @@ export default defineComponent({ isChild: computed(() => { return props.setChild }), - isExpanded: computed(() => { - return props.setIsExpanded - }), - item: computed(() => { + item: computed(() => { if (!isDraft(props.setItem) && !props.setChild) { // if base reg && not draft check to update expand const baseReg = props.setItem as RegistrationSummaryIF diff --git a/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts b/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts index 9ea52e0ac..5705df039 100644 --- a/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts +++ b/ppr-ui/src/interfaces/ppr-api-interfaces/registration-interfaces.ts @@ -110,6 +110,7 @@ export interface DraftResultIF { registrationDescription: string registrationType: APIRegistrationTypes | APIAmendmentTypes type: DraftTypes // One of enum DraftTypes. + expand?: boolean } // Financing Statement registration interface. diff --git a/ppr-ui/src/utils/mhr-api-helper.ts b/ppr-ui/src/utils/mhr-api-helper.ts index 342fd7921..bcfdcc18c 100644 --- a/ppr-ui/src/utils/mhr-api-helper.ts +++ b/ppr-ui/src/utils/mhr-api-helper.ts @@ -332,7 +332,7 @@ export async function mhrRegistrationHistory (withCollapse: boolean = false, sor throw new Error('Invalid API response') } - return result.data + return result.data.map(item => ({ ...item, expand: false })) } catch (error: any) { return { error: { diff --git a/ppr-ui/src/views/amendment/ConfirmAmendment.vue b/ppr-ui/src/views/amendment/ConfirmAmendment.vue index 335304cb5..68fef9c5a 100644 --- a/ppr-ui/src/views/amendment/ConfirmAmendment.vue +++ b/ppr-ui/src/views/amendment/ConfirmAmendment.vue @@ -576,7 +576,7 @@ export default defineComponent({ scrollToInvalid() return } - if ((isRoleStaffReg) || (isRoleStaffSbc)) { + if ((isRoleStaffReg.value) || (isRoleStaffSbc.value)) { localState.staffPaymentDialogDisplay = true } else { submitAmendment() diff --git a/ppr-ui/tests/unit/RegistrationTable.spec.ts b/ppr-ui/tests/unit/RegistrationTable.spec.ts index d28e86277..5c8bbcbf1 100644 --- a/ppr-ui/tests/unit/RegistrationTable.spec.ts +++ b/ppr-ui/tests/unit/RegistrationTable.spec.ts @@ -161,6 +161,8 @@ describe('Test registration table with results', () => { // expand rows.at(i).vm.$emit('toggleExpand', true) await flushPromises() + await nextTick() + expect(rows.at(i).vm.$props.setIsExpanded).toEqual(true) // child row will not be part of original rows list const childRow = wrapper.findAllComponents(TableRow).at(i + 1) diff --git a/ppr-ui/tests/unit/RegistrationsWrapper.spec.ts b/ppr-ui/tests/unit/RegistrationsWrapper.spec.ts index 680298925..3e709aa63 100644 --- a/ppr-ui/tests/unit/RegistrationsWrapper.spec.ts +++ b/ppr-ui/tests/unit/RegistrationsWrapper.spec.ts @@ -261,7 +261,7 @@ describe('Dashboard add registration tests', () => { let wrapper: Wrapper let sandbox const { assign } = window.location - const myRegAdd: RegistrationSummaryIF = mockedRegistration1 + const myRegAdd: RegistrationSummaryIF = { ...mockedRegistration1, expand: false } sessionStorage.setItem('PPR_API_URL', 'mock-url-ppr') sessionStorage.setItem('KEYCLOAK_TOKEN', 'token') diff --git a/ppr-ui/tests/unit/test-data/mock-registration-responses.ts b/ppr-ui/tests/unit/test-data/mock-registration-responses.ts index c1da67c8f..ed2bb38fb 100644 --- a/ppr-ui/tests/unit/test-data/mock-registration-responses.ts +++ b/ppr-ui/tests/unit/test-data/mock-registration-responses.ts @@ -40,7 +40,8 @@ export const mockedRegistration2: RegistrationSummaryIF = { registrationNumber: 'BC456788', registrationType: APIAmendmentTypes.AMENDMENT, securedParties: 'Bank of Montreal', - statusType: APIStatusTypes.ACTIVE + statusType: APIStatusTypes.ACTIVE, + expand: false } export const mockedRegistration2Child: RegistrationSummaryIF = { @@ -82,7 +83,8 @@ export const mockedDraft1: DraftResultIF = { registrationDescription: '', path: '/path/to/doc', createDateTime: '2021-08-03T17:21:17+00:00', - clientReferenceId: 'FFF555' + clientReferenceId: 'FFF555', + expand: false } export const mockedDraft2: DraftResultIF = { @@ -124,7 +126,8 @@ export const mockedRegistration1Collapsed: RegistrationSummaryIF = { registrationNumber: 'GOV2343', registrationType: APIRegistrationTypes.SECURITY_AGREEMENT, securedParties: 'Bank of Nova Scotia', - statusType: APIStatusTypes.ACTIVE + statusType: APIStatusTypes.ACTIVE, + expand: false } export const mockedRegistration2Collapsed: RegistrationSummaryIF = { @@ -141,7 +144,8 @@ export const mockedRegistration2Collapsed: RegistrationSummaryIF = { registrationNumber: 'BC456788', registrationType: APIAmendmentTypes.AMENDMENT, securedParties: 'Bank of Montreal', - statusType: APIStatusTypes.ACTIVE + statusType: APIStatusTypes.ACTIVE, + expand: false } export const mockedMhRegistration: MhRegistrationSummaryIF = { @@ -158,7 +162,8 @@ export const mockedMhRegistration: MhRegistrationSummaryIF = { documentRegistrationNumber: 'GOV2343', baseRegistrationNumber: '654321', registrationType: APIMhrTypes.MANUFACTURED_HOME_REGISTRATION, - statusType: MhApiStatusTypes.ACTIVE + statusType: MhApiStatusTypes.ACTIVE, + expand: true } export const mockedMhDraft: MhrDraftIF = {