diff --git a/apps/core/src/domain/indexationManager/indexationManagerDomain.spec.ts b/apps/core/src/domain/indexationManager/indexationManagerDomain.spec.ts index 8615d3ca5..acc0df3ff 100644 --- a/apps/core/src/domain/indexationManager/indexationManagerDomain.spec.ts +++ b/apps/core/src/domain/indexationManager/indexationManagerDomain.spec.ts @@ -6,7 +6,6 @@ import * as amqp from 'amqplib'; import {IAttributeDomain} from 'domain/attribute/attributeDomain'; import {ILibraryDomain} from 'domain/library/libraryDomain'; import {IRecordDomain} from 'domain/record/recordDomain'; -import {IRecordRepo} from 'infra/record/recordRepo'; import {IConfig} from '_types/config'; import {IQueryInfos} from '_types/queryInfos'; import indexationManager from './indexationManagerDomain'; @@ -83,10 +82,6 @@ describe('Indexation Manager', () => { }); test('index database', async () => { - const mockRecordRepo: Mockify = { - updateRecord: jest.fn() - }; - const mockRecordDomain: Mockify = { find: global.__mockPromise({ list: [ @@ -101,7 +96,8 @@ describe('Indexation Manager', () => { }; const mockAttributeDomain: Mockify = { - getLibraryFullTextAttributes: global.__mockPromise([{id: 'id'}]) + getLibraryFullTextAttributes: global.__mockPromise([{id: 'id'}]), + getLibraryAttributes: global.__mockPromise([{id: 'id'}]) }; const mockLibraryDomain: Mockify = { @@ -120,7 +116,6 @@ describe('Indexation Manager', () => { const indexation = indexationManager({ config: conf as IConfig, 'core.domain.record': mockRecordDomain as IRecordDomain, - 'core.infra.record': mockRecordRepo as IRecordRepo, 'core.domain.attribute': mockAttributeDomain as IAttributeDomain, 'core.domain.library': mockLibraryDomain as ILibraryDomain, 'core.infra.indexation.indexationService': mockIndexationService as IIndexationService diff --git a/apps/core/src/domain/indexationManager/indexationManagerDomain.ts b/apps/core/src/domain/indexationManager/indexationManagerDomain.ts index 1db4820a7..3eb299c03 100644 --- a/apps/core/src/domain/indexationManager/indexationManagerDomain.ts +++ b/apps/core/src/domain/indexationManager/indexationManagerDomain.ts @@ -9,14 +9,13 @@ import * as amqp from 'amqplib'; import {IAttributeDomain} from 'domain/attribute/attributeDomain'; import {ILibraryDomain} from 'domain/library/libraryDomain'; import {IFindRecordParams, IRecordDomain} from 'domain/record/recordDomain'; -import {IRecordRepo} from 'infra/record/recordRepo'; import Joi from 'joi'; -import {isEqual, pick} from 'lodash'; +import {isEqual, difference, intersectionBy} from 'lodash'; import {v4 as uuidv4} from 'uuid'; -import {AttributeTypes, IAttribute, IAttributeFilterOptions} from '../../_types/attribute'; +import {AttributeTypes, IAttribute} from '../../_types/attribute'; import {EventAction, IDbEvent, ILibraryPayload, IRecordPayload, IValuePayload} from '../../_types/event'; -import {AttributeCondition, Operator} from '../../_types/record'; -import {CORE_INDEX_FIELD, IIndexationService} from '../../infra/indexation/indexationService'; +import {AttributeCondition, IRecord, Operator} from '../../_types/record'; +import {IIndexationService} from '../../infra/indexation/indexationService'; export interface IIndexationManagerDomain { init(): Promise; @@ -27,27 +26,72 @@ interface IDeps { config?: Config.IConfig; 'core.infra.amqpService'?: IAmqpService; 'core.domain.record'?: IRecordDomain; - 'core.infra.record'?: IRecordRepo; 'core.domain.library'?: ILibraryDomain; 'core.domain.attribute'?: IAttributeDomain; 'core.infra.indexation.indexationService'?: IIndexationService; } -export default function ({ +export default function({ config = null, 'core.infra.amqpService': amqpService = null, 'core.domain.record': recordDomain = null, - 'core.infra.record': recordRepo = null, 'core.domain.library': libraryDomain = null, 'core.domain.attribute': attributeDomain = null, 'core.infra.indexation.indexationService': indexationService = null }: IDeps): IIndexationManagerDomain { - const _indexRecords = async (findRecordParams: IFindRecordParams, ctx: IQueryInfos): Promise => { + const _indexRecords = async ( + findRecordParams: IFindRecordParams, + ctx: IQueryInfos, + attributes?: {up?: string[]; del?: string[]} + ): Promise => { if (!(await indexationService.isLibraryListed(findRecordParams.library))) { await indexationService.listLibrary(findRecordParams.library); } - const fullTextAttributes = await attributeDomain.getLibraryFullTextAttributes(findRecordParams.library, ctx); + const fullTextLibraryAttributes = await attributeDomain.getLibraryFullTextAttributes( + findRecordParams.library, + ctx + ); + + // We retrieve the properties of the indexed attributes to be updated + const attributesToEdit = {up: [], del: []}; + if (attributes) { + const libraryAttributes = await attributeDomain.getLibraryAttributes(findRecordParams.library, ctx); + attributesToEdit.up = fullTextLibraryAttributes.filter(a => attributes.up?.includes(a.id)); + attributesToEdit.del = libraryAttributes.filter(a => attributes.del?.includes(a.id)); + } else { + attributesToEdit.up = fullTextLibraryAttributes; + attributesToEdit.del = []; + } + + const _toUp = async (record: IRecord, attribute: IAttribute) => { + let val = await recordDomain.getRecordFieldValue({ + library: findRecordParams.library, + record, + attributeId: attribute.id, + options: { + forceGetAllValues: true + }, + ctx + }); + + // FIXME: is this statement necessary? + if (typeof val === 'undefined') { + return {}; + } + + val = await _getFormattedValuesAndLabels(attribute, val, ctx); + + const value = Array.isArray(val) ? val.map(v => v?.value).filter(e => e) : val?.value; + + if (value === null || (Array.isArray(value) && !value.length)) { + return {[attribute.id]: null}; + } + + return { + [attribute.id]: typeof value === 'object' ? JSON.stringify(value) : String(value) + }; + }; const records = await recordDomain.find({ params: findRecordParams, @@ -55,38 +99,11 @@ export default function ({ }); for (const record of records.list) { - const data = ( - await Promise.all( - fullTextAttributes.map(async fta => { - let val = await recordDomain.getRecordFieldValue({ - library: findRecordParams.library, - record, - attributeId: fta.id, - options: { - forceGetAllValues: true - }, - ctx - }); - - // FIXME: is this statement necessary? - if (typeof val === 'undefined') { - return {}; - } - - val = await _getFormattedValuesAndLabels(fta, val, ctx); - - const value = Array.isArray(val) ? val.map(v => v?.value).filter(e => e) : val?.value; - - if (value === null || (Array.isArray(value) && !value.length)) { - return {}; - } - - return { - [fta.id]: typeof value === 'object' ? JSON.stringify(value) : String(value) - }; - }) - ) - ).reduce((acc, e) => ({...acc, ...e}), {}); + // We iterate on the attributes to be edited and define new values for these attributes. + // The _toUp function returns the updated value of an attribute. Attributes to be deleted are set to null. + const data = (await Promise.all([...attributesToEdit.up.map(async a => _toUp(record, a))])) + .concat(attributesToEdit.del.map(a => ({[a.id]: null}))) + .reduce((acc, e) => ({...acc, ...e}), {}); await indexationService.indexRecord(findRecordParams.library, record.id, data); } @@ -136,15 +153,12 @@ export default function ({ return values; }; - const _indexLinkedLibraries = async (libraryId: string, ctx: IQueryInfos, recordId?: string): Promise => { - const linkedTreeFilters: IAttributeFilterOptions = {linked_tree: libraryId}; - const linkedLibFilters: IAttributeFilterOptions = {linked_library: libraryId}; - + const _indexLinkedLibraries = async (libraryId: string, ctx: IQueryInfos, toRecordId?: string): Promise => { // get all attributes with the new library as linked library / linked_tree - const attributes = ( + const attributesToUpdate = ( await attributeDomain.getAttributes({ params: { - filters: linkedLibFilters + filters: {linked_library: libraryId} }, ctx }) @@ -152,45 +166,33 @@ export default function ({ ( await attributeDomain.getAttributes({ params: { - filters: linkedTreeFilters + filters: {linked_tree: libraryId} }, ctx }) ).list ); - // get all libraries using theses attributes - const libraries = []; - for (const attr of attributes) { - const res = await libraryDomain.getLibrariesUsingAttribute(attr.id, ctx); + const libs = (await libraryDomain.getLibraries({ctx})).list; - for (let i = res.length - 1; i >= 0; i--) { - const fullTextAttributes = await attributeDomain.getLibraryFullTextAttributes(res[i], ctx); - if (!fullTextAttributes.map(a => a.id).includes(attr.id)) { - res.splice(i, 1); - } - } - - libraries.push(res); - } + // We cross-reference the attributes that point to the library that has been previously updated and + // the indexed attributes of each library. If these libraries use them, we need to update the indexes. + for (const l of libs) { + const intersections = intersectionBy(l.fullTextAttributes, attributesToUpdate, 'id'); - const linkedLibraries = [...new Set([].concat(...libraries))]; + if (intersections.length) { + let filters; - for (const ll of linkedLibraries) { - let filters; - - if (typeof recordId !== 'undefined') { - let fullTextAttributes = await attributeDomain.getLibraryFullTextAttributes(ll, ctx); - fullTextAttributes = fullTextAttributes.filter(a => a.linked_library === libraryId); + if (typeof toRecordId !== 'undefined') { + filters = intersections.map(a => ({ + field: `${a.id}.${a.linked_tree ? `${libraryId}.` : ''}id`, // if field is a tree attribute, we must specify the library + condition: AttributeCondition.EQUAL, + value: toRecordId + })); + } - filters = fullTextAttributes.map(attr => ({ - field: attr.id, - condition: AttributeCondition.EQUAL, - value: recordId - })); + await _indexRecords({library: l.id, filters}, ctx, {up: intersections.map(a => a.id)}); } - - await _indexRecords({library: ll, filters}, ctx); } }; @@ -215,41 +217,24 @@ export default function ({ case EventAction.RECORD_SAVE: { data = (event.payload as IRecordPayload).data; - const fullTextAttributes = await attributeDomain.getLibraryFullTextAttributes(data.libraryId, ctx); - data.new = pick( - data.new, - fullTextAttributes.map(a => a.id) + await _indexRecords( + { + library: data.libraryId, + filters: [{field: 'id', condition: AttributeCondition.EQUAL, value: data.id}] + }, + ctx ); - // if simple link replace id by record label - for (const [key, value] of Object.entries(data.new)) { - const attrProps = await attributeDomain.getAttributeProperties({id: key, ctx}); - - if ( - attrProps.type === AttributeTypes.SIMPLE_LINK || - attrProps.type === AttributeTypes.ADVANCED_LINK - ) { - const recordIdentity = await recordDomain.getRecordIdentity( - {id: value as string, library: attrProps.linked_library}, - ctx - ); - - data.new[key] = recordIdentity.label ? String(recordIdentity.label) : value && String(value); - } - } - - await recordRepo.updateRecord({ - libraryId: data.libraryId, - recordData: {id: data.id, [CORE_INDEX_FIELD]: data.new} - }); - break; } case EventAction.LIBRARY_SAVE: { data = (event.payload as ILibraryPayload).data; + const attrsToDel = difference(data.old?.fullTextAttributes, data.new?.fullTextAttributes) as string[]; + const attrsToAdd = difference(data.new?.fullTextAttributes, data.old?.fullTextAttributes) as string[]; + if (!isEqual(data.old?.fullTextAttributes?.sort(), data.new?.fullTextAttributes?.sort())) { - await _indexRecords({library: data.new.id}, ctx); + await _indexRecords({library: data.new.id}, ctx, {up: attrsToAdd, del: attrsToDel}); } // if label change we re-index all linked libraries @@ -262,46 +247,25 @@ export default function ({ case EventAction.VALUE_SAVE: { data = (event.payload as IValuePayload).data; - const attrToIndex = await attributeDomain.getLibraryFullTextAttributes(data.libraryId, ctx); + const fullTextAttributes = await attributeDomain.getLibraryFullTextAttributes(data.libraryId, ctx); - if (data.attributeId === 'active' && data.value.new.value === true) { + const isActivated = data.attributeId === 'active' && data.value.new.value === true; + const isAttrToIndex = fullTextAttributes.map(a => a.id).includes(data.attributeId); + + if (isActivated || isAttrToIndex) { await _indexRecords( { library: data.libraryId, filters: [{field: 'id', condition: AttributeCondition.EQUAL, value: data.recordId}] }, - ctx + ctx, + isActivated || !isAttrToIndex ? null : {up: [data.attributeId]} ); - } else if (attrToIndex.map(a => a.id).includes(data.attributeId)) { - const attr = attrToIndex[await attrToIndex.map(a => a.id).indexOf(data.attributeId)]; - - // get format value(s) - data.value.new = await recordDomain.getRecordFieldValue({ - library: data.libraryId, - record: {id: data.recordId}, - attributeId: data.attributeId, - ctx - }); - - data.value.new = await _getFormattedValuesAndLabels(attr, data.value.new, ctx); - - await recordRepo.updateRecord({ - libraryId: data.libraryId, - recordData: { - id: data.recordId, - [CORE_INDEX_FIELD]: { - [data.attributeId]: Array.isArray(data.value.new) - ? data.value.new.map(v => v.value) - : data.value.new.value - } - } - }); } - const library = await libraryDomain.getLibraryProperties(data.libraryId, ctx); - - // if new value of the attribute is the label of the library + // if the new attribute's value is the label of the library // we have to re-index all linked libraries + const library = await libraryDomain.getLibraryProperties(data.libraryId, ctx); if (library.recordIdentityConf?.label === data.attributeId) { await _indexLinkedLibraries(data.libraryId, ctx, data.recordId); } @@ -313,33 +277,18 @@ export default function ({ const attrProps = await attributeDomain.getAttributeProperties({id: data.attributeId, ctx}); - let values: IValue[]; - - if (attrProps.multiple_values) { - values = (await recordDomain.getRecordFieldValue({ + await _indexRecords( + { library: data.libraryId, - record: {id: data.recordId}, - attributeId: data.attributeId, - ctx - })) as IValue[]; - - values = (await _getFormattedValuesAndLabels(attrProps, values, ctx)) as IValue[]; - } - - await recordRepo.updateRecord({ - libraryId: data.libraryId, - recordData: { - id: data.recordId, - [CORE_INDEX_FIELD]: { - [data.attributeId]: values?.map((v: IValue) => String(v.value)) ?? null - } - } - }); - - const library = await libraryDomain.getLibraryProperties(data.libraryId, ctx); + filters: [{field: 'id', condition: AttributeCondition.EQUAL, value: data.recordId}] + }, + ctx, + attrProps.multiple_values ? {up: [data.attributeId]} : {del: [data.attributeId]} + ); - // if attribute updated/deleted is the label of the library + // if the updated/deleted attribute is the label of the library // we have to re-index all linked libraries + const library = await libraryDomain.getLibraryProperties(data.libraryId, ctx); if (library.recordIdentityConf?.label === data.attributeId) { await _indexLinkedLibraries(data.libraryId, ctx, data.recordId); } diff --git a/apps/core/src/infra/indexation/indexationService.ts b/apps/core/src/infra/indexation/indexationService.ts index 21ad22944..12c152f2b 100644 --- a/apps/core/src/infra/indexation/indexationService.ts +++ b/apps/core/src/infra/indexation/indexationService.ts @@ -99,7 +99,7 @@ export default function ({ await recordRepo.updateRecord({ libraryId, recordData: {id: recordId, [CORE_INDEX_FIELD]: data}, - mergeObjects: false + mergeObjects: true }); }, getSearchQuery diff --git a/apps/data-studio/package.json b/apps/data-studio/package.json index dadeebcf1..dba12b1b3 100644 --- a/apps/data-studio/package.json +++ b/apps/data-studio/package.json @@ -10,7 +10,7 @@ "@leav/ui": "workspace:libs/ui", "@leav/utils": "workspace:libs/utils", "@reduxjs/toolkit": "1.9.2", - "antd": "5.6.4", + "antd": "5.7.0", "apollo-cache-inmemory": "1.6.6", "apollo-upload-client": "14.1.3", "dayjs": "1.11.7", diff --git a/apps/login/package.json b/apps/login/package.json index c04708c71..2a76ff51e 100644 --- a/apps/login/package.json +++ b/apps/login/package.json @@ -6,7 +6,7 @@ "dependencies": { "@ant-design/icons": "5.1.4", "@leav/ui": "workspace:libs/ui", - "antd": "5.6.4", + "antd": "5.7.0", "i18next": "22.5.0", "i18next-browser-languagedetector": "7.0.2", "i18next-http-backend": "2.1.1", diff --git a/apps/portal/package.json b/apps/portal/package.json index ca51a6f33..5a56746b3 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -6,7 +6,7 @@ "@ant-design/icons": "5.1.4", "@apollo/client": "3.7.10", "@leav/ui": "workspace:libs/ui", - "antd": "5.6.4", + "antd": "5.7.0", "cross-fetch": "3.1.5", "graphql-ws": "5.12.0", "i18next": "22.5.0", diff --git a/yarn.lock b/yarn.lock index 78329e146..b27dd87c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3492,6 +3492,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.22.5": + version: 7.22.10 + resolution: "@babel/runtime@npm:7.22.10" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 524d41517e68953dbc73a4f3616b8475e5813f64e28ba89ff5fca2c044d535c2ea1a3f310df1e5bb06162e1f0b401b5c4af73fe6e2519ca2450d9d8c44cf268d + languageName: node + linkType: hard + "@babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": version: 7.16.7 resolution: "@babel/template@npm:7.16.7" @@ -6308,9 +6317,9 @@ __metadata: languageName: node linkType: hard -"@rc-component/color-picker@npm:~1.2.0": - version: 1.2.0 - resolution: "@rc-component/color-picker@npm:1.2.0" +"@rc-component/color-picker@npm:~1.4.0": + version: 1.4.1 + resolution: "@rc-component/color-picker@npm:1.4.1" dependencies: "@babel/runtime": ^7.10.1 "@ctrl/tinycolor": ^3.6.0 @@ -6319,7 +6328,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: d0eb0ead64d386342c7813b0bbe163fc9b5f7c3bda9493a5d9106752a1b5643ad5a55a20ae20942931e50aafa80d1d243a05ab23a7c5f19720ed21065b17e1d7 + checksum: 7695dc182d5c88039b7c1a82acbd796111f5e90692641151555dc78b234ab67b7f2aedfab38a6874eb245f98a0b444c8b36c0c08885eb9de5eb6a096801c2225 languageName: node linkType: hard @@ -8943,9 +8952,9 @@ __metadata: languageName: node linkType: hard -"antd@npm:5.6.4": - version: 5.6.4 - resolution: "antd@npm:5.6.4" +"antd@npm:5.7.0": + version: 5.7.0 + resolution: "antd@npm:5.7.0" dependencies: "@ant-design/colors": ^7.0.0 "@ant-design/cssinjs": ^1.10.1 @@ -8953,7 +8962,7 @@ __metadata: "@ant-design/react-slick": ~1.0.0 "@babel/runtime": ^7.18.3 "@ctrl/tinycolor": ^3.6.0 - "@rc-component/color-picker": ~1.2.0 + "@rc-component/color-picker": ~1.4.0 "@rc-component/mutate-observer": ^1.0.0 "@rc-component/tour": ~1.8.0 "@rc-component/trigger": ^1.13.0 @@ -8968,15 +8977,15 @@ __metadata: rc-drawer: ~6.2.0 rc-dropdown: ~4.1.0 rc-field-form: ~1.34.0 - rc-image: ~5.17.1 - rc-input: ~1.0.4 - rc-input-number: ~7.4.0 - rc-mentions: ~2.3.0 - rc-menu: ~9.9.2 + rc-image: ~7.0.0-2 + rc-input: ~1.1.0 + rc-input-number: ~8.0.0 + rc-mentions: ~2.5.0 + rc-menu: ~9.10.0 rc-motion: ^2.7.3 rc-notification: ~5.0.4 rc-pagination: ~3.5.0 - rc-picker: ~3.8.2 + rc-picker: ~3.10.0 rc-progress: ~3.4.1 rc-rate: ~2.12.0 rc-resize-observer: ^1.2.0 @@ -8986,10 +8995,10 @@ __metadata: rc-steps: ~6.0.0 rc-switch: ~4.1.0 rc-table: ~7.32.1 - rc-tabs: ~12.7.0 - rc-textarea: ~1.2.2 + rc-tabs: ~12.9.0 + rc-textarea: ~1.3.2 rc-tooltip: ~6.0.0 - rc-tree: ~5.7.4 + rc-tree: ~5.7.6 rc-tree-select: ~5.9.0 rc-upload: ~4.3.0 rc-util: ^5.32.0 @@ -8998,7 +9007,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 1ff556ec0cf23a1fb2ee937126dd193b695bc2df3a9ee162c08a6ed1409f2df3d22f3749a42a92a6073cc2f5c8166c679c89cc831d59964739445efd39451f9d + checksum: 3915344b8ff92e2e789e4f34338ba62953cfc97a7be2eff420a91f8a6d03d5133c2b60419b4acd39e09faafa71f24281616834e4ab3527733bff3fc09efc0de9 languageName: node linkType: hard @@ -12384,7 +12393,7 @@ __metadata: "@types/redux-mock-store": 1.0.3 "@types/styled-components": 5.1.26 "@vitejs/plugin-react": 3.1.0 - antd: 5.6.4 + antd: 5.7.0 apollo: 2.34.0 apollo-cache-inmemory: 1.6.6 apollo-upload-client: 14.1.3 @@ -19430,7 +19439,7 @@ __metadata: "@types/react-dom": 18.2.6 "@types/react-router-dom": 5.3.3 "@vitejs/plugin-react": 3.1.0 - antd: 5.6.4 + antd: 5.7.0 i18next: 22.5.0 i18next-browser-languagedetector: 7.0.2 i18next-http-backend: 2.1.1 @@ -21416,7 +21425,7 @@ __metadata: "@types/react": 18.2.14 "@types/react-dom": 18.2.6 "@vitejs/plugin-react": 3.1.0 - antd: 5.6.4 + antd: 5.7.0 apollo: 2.34.0 commander: 10.0.0 cross-fetch: 3.1.5 @@ -22046,41 +22055,42 @@ __metadata: languageName: node linkType: hard -"rc-image@npm:~5.17.1": - version: 5.17.1 - resolution: "rc-image@npm:5.17.1" +"rc-image@npm:~7.0.0-2": + version: 7.0.0 + resolution: "rc-image@npm:7.0.0" dependencies: "@babel/runtime": ^7.11.2 "@rc-component/portal": ^1.0.2 classnames: ^2.2.6 rc-dialog: ~9.1.0 rc-motion: ^2.6.2 - rc-util: ^5.0.6 + rc-util: ^5.34.1 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 8e08223261d7b0a7ec6e7f705576d9d721b8bf25b6c1dbc70d01fe7d44c16d290edb3abf13c847331d9791aab2f1c10bef57dfe78b620b945bb45d9643d1fa6b + checksum: e45be52d57481b290501d97dc8fe76a5541564e92a183c087956f09b39b0f4cd21aabad668e8df1ab3a263c009f7d02f91be333e4b153190b95d4dd6c5a08f44 languageName: node linkType: hard -"rc-input-number@npm:~7.4.0": - version: 7.4.0 - resolution: "rc-input-number@npm:7.4.0" +"rc-input-number@npm:~8.0.0": + version: 8.0.4 + resolution: "rc-input-number@npm:8.0.4" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/mini-decimal": ^1.0.1 classnames: ^2.2.5 - rc-util: ^5.23.0 + rc-input: ~1.1.0 + rc-util: ^5.28.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 6f6a46eec6d1993ee47c9de5622276fc33f37d36ee06582cd9d7625ae83516a3e335c5bfc82950d8c9bdf603eeac7c7b25b9c1148fc2465aa3cb1f0a5f6485df + checksum: 87acbd405279b6fc52dbb540255120f4e7d097d79a220c17c6a974f2196fa29dedc5b37e047c9616f2dbd464b3aca583e4d4945f67486b7950fb67acdb59a8be languageName: node linkType: hard -"rc-input@npm:~1.0.0, rc-input@npm:~1.0.4": - version: 1.0.4 - resolution: "rc-input@npm:1.0.4" +"rc-input@npm:~1.1.0": + version: 1.1.1 + resolution: "rc-input@npm:1.1.1" dependencies: "@babel/runtime": ^7.11.1 classnames: ^2.2.1 @@ -22088,42 +22098,42 @@ __metadata: peerDependencies: react: ">=16.0.0" react-dom: ">=16.0.0" - checksum: 9fca51ab654fc2b412820a9bfd7e8759799dd74b84bb6b4e3885e2dfcb858d534b4bf8190598cd3e2e9f1887784c69322e5d16266079d87fc2b399da5b6a28bd + checksum: c018af027476809b6501e2aa264ac9ddb2c413940bc911e6f6441baf98dba8c9f69d9abe96279517857231ca60f92a957c22d9187d5e5b92cf6325d1a09bfa6f languageName: node linkType: hard -"rc-mentions@npm:~2.3.0": - version: 2.3.0 - resolution: "rc-mentions@npm:2.3.0" +"rc-mentions@npm:~2.5.0": + version: 2.5.0 + resolution: "rc-mentions@npm:2.5.0" dependencies: - "@babel/runtime": ^7.10.1 + "@babel/runtime": ^7.22.5 "@rc-component/trigger": ^1.5.0 classnames: ^2.2.6 - rc-input: ~1.0.0 - rc-menu: ~9.9.0 - rc-textarea: ~1.2.0 + rc-input: ~1.1.0 + rc-menu: ~9.10.0 + rc-textarea: ~1.3.0 rc-util: ^5.22.5 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: b1548f3a2cec8609cc1ef1a5fe56db5d06983ec465ac00fa2ecd259a20f9619f8e6179135b02aa45565d8b724e66f65d708d3ce4bff254b3c5764db10002c762 + checksum: 084236d5e58738acbc8ab3ccaa9c02daf6a6cda8040780a8c99cdebf9a7bec262df5a22732ce250d73263bc64c115f44bc8b5e11b0db4eb82c68f7cdcbb2ab9c languageName: node linkType: hard -"rc-menu@npm:~9.9.0, rc-menu@npm:~9.9.2": - version: 9.9.2 - resolution: "rc-menu@npm:9.9.2" +"rc-menu@npm:~9.10.0": + version: 9.10.0 + resolution: "rc-menu@npm:9.10.0" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/trigger": ^1.6.2 classnames: 2.x rc-motion: ^2.4.3 - rc-overflow: ^1.2.8 + rc-overflow: ^1.3.1 rc-util: ^5.27.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 028108a61c23672c8ac469c14c7545c0f6a7f5b58e49b6bb2a5225d1eb7d86e37fa40cbbcf7150225289ad894b54fa6c974bd7a9562db6f34dbe26ad7db7985c + checksum: 600f16a6d8b64ee90093786abdee3ad4663d4c4922ad7b568bc51dd9e5edbbd230ba93a8eae56d8d8ce070551ca12f3ae3c01d5e5b105a3d07a11245207fda6c languageName: node linkType: hard @@ -22199,9 +22209,9 @@ __metadata: languageName: node linkType: hard -"rc-overflow@npm:^1.2.8": - version: 1.2.8 - resolution: "rc-overflow@npm:1.2.8" +"rc-overflow@npm:^1.3.1": + version: 1.3.1 + resolution: "rc-overflow@npm:1.3.1" dependencies: "@babel/runtime": ^7.11.1 classnames: ^2.2.1 @@ -22210,7 +22220,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: f6df4d1f2baff7391b0ca981fe0f75aba975b1214dc15eba2ee07e4d0b02f19d89a7ac26d6da580cc90b758a8dc07fc69c7599297f38be91cb2d9b387816d3ce + checksum: 1573dcb2509634ca3eea8f45575fd80128b3da9395af64e2ecf0059a8cae6f29e07a8583935682b837f38db0d533b5cd68d75b4918a75f0d0cd10bdbf07db575 languageName: node linkType: hard @@ -22228,9 +22238,9 @@ __metadata: languageName: node linkType: hard -"rc-picker@npm:~3.8.2": - version: 3.8.2 - resolution: "rc-picker@npm:3.8.2" +"rc-picker@npm:~3.10.0": + version: 3.10.0 + resolution: "rc-picker@npm:3.10.0" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/trigger": ^1.5.0 @@ -22252,7 +22262,7 @@ __metadata: optional: true moment: optional: true - checksum: cc1d23a0d8e4bdce2ca480969be2363d68731cdd0f22e440422f949dfc66d09a5951298444413d5d9d61b1562493d54a365b58716e1d49ec645f7d6d7d011707 + checksum: 908df48acfff11d62a64b11f12ceda10f424b3483ea2926ca25d5477609f0416559826ede78f2a0604682cc0e28a8c0ffdd98ee802746b1bee0f5b9890699df4 languageName: node linkType: hard @@ -22405,37 +22415,37 @@ __metadata: languageName: node linkType: hard -"rc-tabs@npm:~12.7.0": - version: 12.7.1 - resolution: "rc-tabs@npm:12.7.1" +"rc-tabs@npm:~12.9.0": + version: 12.9.0 + resolution: "rc-tabs@npm:12.9.0" dependencies: "@babel/runtime": ^7.11.2 classnames: 2.x rc-dropdown: ~4.1.0 - rc-menu: ~9.9.0 + rc-menu: ~9.10.0 rc-motion: ^2.6.2 rc-resize-observer: ^1.0.0 rc-util: ^5.16.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: f20fcf63ea504bd216b3bda849b9ab0c0e308ad6f26eef18f0c4ea17544968ee6bd53f6a3d187476f84ae0ea4390f97467b1a467195c80295154143bc0eee3ad + checksum: a8ab132f3e2f5dfc933e6942962ea3c13a0aa9b88c498d9183901f0124c92d60692fe5e9ee34bfa67dfce3b8ee426d999f9dd465617fde755a27dfbdd6fcd134 languageName: node linkType: hard -"rc-textarea@npm:~1.2.0, rc-textarea@npm:~1.2.2": - version: 1.2.3 - resolution: "rc-textarea@npm:1.2.3" +"rc-textarea@npm:~1.3.0, rc-textarea@npm:~1.3.2": + version: 1.3.4 + resolution: "rc-textarea@npm:1.3.4" dependencies: "@babel/runtime": ^7.10.1 classnames: ^2.2.1 - rc-input: ~1.0.4 + rc-input: ~1.1.0 rc-resize-observer: ^1.0.0 rc-util: ^5.27.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: cf0b19982f380ecd4196f0a7ec6457fbf8d49fc6701be05ff811b0d0ec944a03f4d1e20f1ffd2a039644ab78359e9ff57e1826c716879426890182ffb18724af + checksum: b91ca6e3ebd906c7ca020f74e0d9f6cf6fc423b426b41480c9b46cfbd78a586bb89447aa3eaeb0f9b04259ce36aa477d3f2a428ead05227e80209661079a1ca3 languageName: node linkType: hard @@ -22485,9 +22495,9 @@ __metadata: languageName: node linkType: hard -"rc-tree@npm:~5.7.4": - version: 5.7.8 - resolution: "rc-tree@npm:5.7.8" +"rc-tree@npm:~5.7.6": + version: 5.7.9 + resolution: "rc-tree@npm:5.7.9" dependencies: "@babel/runtime": ^7.10.1 classnames: 2.x @@ -22497,7 +22507,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: d2e80a32b096ff781e2cbb5b9b8b1f7e2adfff45e74d596985b7d31587fa08755d444388401a39513cb0dc4a97f5e936809749348d85ea555da0913ce0800c6f + checksum: ece66a1c56883da5a3412d524e2fb66e3ddb7c463a0d91e15062f023e590bf738431d70a8697d6799db758cf2f9752c875b89d7d60d5903ab41a5d4185a6600b languageName: node linkType: hard @@ -22515,7 +22525,7 @@ __metadata: languageName: node linkType: hard -"rc-util@npm:^5.0.1, rc-util@npm:^5.0.6, rc-util@npm:^5.15.0, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.19.2, rc-util@npm:^5.2.0, rc-util@npm:^5.3.0, rc-util@npm:^5.6.1": +"rc-util@npm:^5.0.1, rc-util@npm:^5.15.0, rc-util@npm:^5.16.1, rc-util@npm:^5.17.0, rc-util@npm:^5.18.1, rc-util@npm:^5.19.2, rc-util@npm:^5.2.0, rc-util@npm:^5.3.0, rc-util@npm:^5.6.1": version: 5.20.1 resolution: "rc-util@npm:5.20.1" dependencies: @@ -22529,7 +22539,7 @@ __metadata: languageName: node linkType: hard -"rc-util@npm:^5.16.0, rc-util@npm:^5.21.2, rc-util@npm:^5.22.5, rc-util@npm:^5.23.0, rc-util@npm:^5.24.4, rc-util@npm:^5.27.0, rc-util@npm:^5.27.1": +"rc-util@npm:^5.16.0, rc-util@npm:^5.21.2, rc-util@npm:^5.22.5, rc-util@npm:^5.24.4, rc-util@npm:^5.27.0, rc-util@npm:^5.27.1": version: 5.27.1 resolution: "rc-util@npm:5.27.1" dependencies: @@ -22569,6 +22579,19 @@ __metadata: languageName: node linkType: hard +"rc-util@npm:^5.28.0, rc-util@npm:^5.34.1": + version: 5.36.0 + resolution: "rc-util@npm:5.36.0" + dependencies: + "@babel/runtime": ^7.18.3 + react-is: ^16.12.0 + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 51b573bc1d667aecc7655cb4ebefe197503f50238d2f2f82723c271d83b75af2eab7cf3c4cff364b4cf4096463be2959b59d5978b56c0c41dbe8c6089e1949b5 + languageName: node + linkType: hard + "rc-virtual-list@npm:^3.4.8": version: 3.4.13 resolution: "rc-virtual-list@npm:3.4.13" @@ -23345,6 +23368,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 + languageName: node + linkType: hard + "regenerator-transform@npm:^0.15.0": version: 0.15.0 resolution: "regenerator-transform@npm:0.15.0"