Skip to content

Commit

Permalink
move even more logic to code list page
Browse files Browse the repository at this point in the history
  • Loading branch information
standeren committed Dec 19, 2024
1 parent f8d8791 commit a136a1d
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ describe('getCodeListsSearchMatch', () => {
it('returns all code lists when search pattern is .*', () => {
const result = getCodeListsSearchMatch(codeLists, '.*');
const resultTitles = result.map((res) => res.title);
expect(resultTitles).toBe(['codeList1', 'codeList2', 'myCodeList', 'otherCodeList']);
expect(resultTitles).toBe(['codeList1', 'codeList2', 'myCodeList', 'otherList']);

Check failure on line 244 in frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListPage.test.tsx

View workflow job for this annotation

GitHub Actions / Testing

getCodeListsSearchMatch › returns all code lists when search pattern is .*

expect(received).toBe(expected) // Object.is equality If it should pass with deep equality, replace "toBe" with "toStrictEqual" Expected: ["codeList1", "codeList2", "myCodeList", "otherList"] Received: serializes to the same string at Object.toBe (libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListPage.test.tsx:244:26)
});

it('returns no matches when no code list matches the pattern', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useCallback, useState } from 'react';
import React, { useCallback, useEffect, useState } from 'react';
import { StudioHeading, StudioPageError } from '@studio/components';
import type { CodeList as StudioComponentCodeList } from '@studio/components';
import { useTranslation } from 'react-i18next';
Expand Down Expand Up @@ -28,6 +28,7 @@ export function CodeListPage({
fetchDataError,
}: CodeListPageProps): React.ReactElement {
const { t } = useTranslation();
const [codeListSearchPattern, setCodeListSearchPattern] = useState<string>('.*');
const [codeListInEditMode, setCodeListInEditMode] = useState<string>(undefined);
const [codeListsSearchMatch, setCodeListsSearchMatch] =
useState<CodeListWithMetadata[]>(codeLists);
Expand All @@ -40,6 +41,10 @@ export function CodeListPage({
[codeLists, setCodeListsSearchMatch],
);

useEffect(() => {
handleSearchCodeLists(codeListSearchPattern);
}, [codeLists, codeListSearchPattern, handleSearchCodeLists]);

if (fetchDataError)
return <StudioPageError message={t('app_content_library.code_lists.fetch_error')} />;

Expand All @@ -63,7 +68,7 @@ export function CodeListPage({
onUploadCodeList={handleUploadCodeList}
onUpdateCodeList={onUpdateCodeList}
codeListNames={codeListTitles}
onHandleSearchCodeLists={handleSearchCodeLists}
onSetCodeListSearchPattern={setCodeListSearchPattern}
/>
<CodeLists
codeLists={codeListsSearchMatch}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { ChangeEvent } from 'react';
import React, { useEffect, useState } from 'react';
import React from 'react';
import { Search } from '@digdir/designsystemet-react';
import { StudioFileUploader, usePrevious } from '@studio/components';
import { StudioFileUploader } from '@studio/components';
import classes from './CodeListsActionsBar.module.css';
import { useTranslation } from 'react-i18next';
import type { CodeListWithMetadata } from '../CodeListPage';
Expand All @@ -14,25 +14,17 @@ export type CodeListsActionsBarProps = {
onUploadCodeList: (updatedCodeList: File) => void;
onUpdateCodeList: (updatedCodeList: CodeListWithMetadata) => void;
codeListNames: string[];
onHandleSearchCodeLists: (codeListPatternMatch: string) => void;
onSetCodeListSearchPattern: (codeListPatternMatch: string) => void;
};

export function CodeListsActionsBar({
onUploadCodeList,
onUpdateCodeList,
codeListNames,
onHandleSearchCodeLists,
onSetCodeListSearchPattern,
}: CodeListsActionsBarProps) {
const { t } = useTranslation();
const getInvalidUploadFileNameErrorMessage = useUploadCodeListNameErrorMessage();
const [codeListSearchPattern, setCodeListSearchPattern] = useState<string>('.*');
const previousSearchPattern = usePrevious<string>(codeListSearchPattern);

useEffect(() => {
if (previousSearchPattern !== codeListSearchPattern) {
onHandleSearchCodeLists(codeListSearchPattern);
}
}, [codeListNames, onHandleSearchCodeLists, previousSearchPattern, codeListSearchPattern]);

const onSubmit = (file: File) => {
const fileNameError = FileNameUtils.findFileNameError(
Expand All @@ -52,10 +44,10 @@ export function CodeListsActionsBar({
size='sm'
placeholder={t('app_content_library.code_lists.search_placeholder')}
onChange={(event: ChangeEvent<HTMLInputElement>) =>
setCodeListSearchPattern(event.target.value)
onSetCodeListSearchPattern(event.target.value)

Check failure on line 47 in frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx

View workflow job for this annotation

GitHub Actions / Testing

CodeListsActionsBar › calls handleSearchCodeLists when searching for code lists

TypeError: onSetCodeListSearchPattern is not a function at onSetCodeListSearchPattern (libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx:47:11) at ../node_modules/@digdir/designsystemet-react/dist/cjs/components/form/Search/Search.js:53:15 at HTMLUnknownElement.callCallback (../node_modules/react-dom/cjs/react-dom.development.js:730:119) at HTMLUnknownElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLUnknownElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLUnknownElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLUnknownElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at Object.invokeGuardedCallbackDev (../node_modules/react-dom/cjs/react-dom.development.js:750:45) at invokeGuardedCallback (../node_modules/react-dom/cjs/react-dom.development.js:771:126) at invokeGuardedCallbackAndCatchFirstError (../node_modules/react-dom/cjs/react-dom.development.js:780:106) at executeDispatch (../node_modules/react-dom/cjs/react-dom.development.js:1672:237) at processDispatchQueueItemsInOrder (../node_modules/react-dom/cjs/react-dom.development.js:1672:1124) at processDispatchQueue (../node_modules/react-dom/cjs/react-dom.development.js:1672:1467) at dispatchEventsForPlugins (../node_modules/react-dom/cjs/react-dom.development.js:1674:300) at ../node_modules/react-dom/cjs/react-dom.development.js:1712:323 at batchedUpdates$1 (../node_modules/react-dom/cjs/react-dom.development.js:4446:410) at batchedUpdates (../node_modules/react-dom/cjs/react-dom.development.js:674:54) at dispatchEventForPluginEventSystem (../node_modules/react-dom/cjs/react-dom.development.js:1712:290) at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (../node_modules/react-dom/cjs/react-dom.development.js:1048:1988) at dispatchEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:1579) at dispatchDiscreteEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:850) at HTMLDivElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLInputElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLInputElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLInputElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at ../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:43 at ../node_modules/@testing-library/react/dist/pure.js:131:16 at ../node_modules/@testing-library/react/dist/act-compat.js:71:24 at act (../node_modules/react/cjs/react.development.js:2199:20) at ../node_modules/@testing-library/react/dist/act-compat.js:70:25 at Object.eventWrapper (../node_modules/@testing-library/react/dist/pure.js:130:28) at Object.wrapEvent (../node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:5:26) at Object.dispatchEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:20) at Object.dispatchUIEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:21:24) at commitInput (../node_modules/@testing-library/user-event/dist/cjs/event/input.js:151:12) at editInputElement (../node_modules/@test

Check failure on line 47 in frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx

View workflow job for this annotation

GitHub Actions / Testing

CodeListsActionsBar › calls handleSearchCodeLists when searching for code lists

TypeError: onSetCodeListSearchPattern is not a function at onSetCodeListSearchPattern (libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx:47:11) at ../node_modules/@digdir/designsystemet-react/dist/cjs/components/form/Search/Search.js:53:15 at HTMLUnknownElement.callCallback (../node_modules/react-dom/cjs/react-dom.development.js:730:119) at HTMLUnknownElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLUnknownElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLUnknownElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLUnknownElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at Object.invokeGuardedCallbackDev (../node_modules/react-dom/cjs/react-dom.development.js:750:45) at invokeGuardedCallback (../node_modules/react-dom/cjs/react-dom.development.js:771:126) at invokeGuardedCallbackAndCatchFirstError (../node_modules/react-dom/cjs/react-dom.development.js:780:106) at executeDispatch (../node_modules/react-dom/cjs/react-dom.development.js:1672:237) at processDispatchQueueItemsInOrder (../node_modules/react-dom/cjs/react-dom.development.js:1672:1124) at processDispatchQueue (../node_modules/react-dom/cjs/react-dom.development.js:1672:1467) at dispatchEventsForPlugins (../node_modules/react-dom/cjs/react-dom.development.js:1674:300) at ../node_modules/react-dom/cjs/react-dom.development.js:1712:323 at batchedUpdates$1 (../node_modules/react-dom/cjs/react-dom.development.js:4446:410) at batchedUpdates (../node_modules/react-dom/cjs/react-dom.development.js:674:54) at dispatchEventForPluginEventSystem (../node_modules/react-dom/cjs/react-dom.development.js:1712:290) at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (../node_modules/react-dom/cjs/react-dom.development.js:1048:1988) at dispatchEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:1579) at dispatchDiscreteEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:850) at HTMLDivElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLInputElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLInputElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLInputElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at ../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:43 at ../node_modules/@testing-library/react/dist/pure.js:131:16 at ../node_modules/@testing-library/react/dist/act-compat.js:71:24 at act (../node_modules/react/cjs/react.development.js:2199:20) at ../node_modules/@testing-library/react/dist/act-compat.js:70:25 at Object.eventWrapper (../node_modules/@testing-library/react/dist/pure.js:130:28) at Object.wrapEvent (../node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:5:26) at Object.dispatchEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:20) at Object.dispatchUIEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:21:24) at commitInput (../node_modules/@testing-library/user-event/dist/cjs/event/input.js:151:12) at editInputElement (../node_modules/@test

Check failure on line 47 in frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx

View workflow job for this annotation

GitHub Actions / Testing

CodeListsActionsBar › calls handleSearchCodeLists when searching for code lists

TypeError: onSetCodeListSearchPattern is not a function at onSetCodeListSearchPattern (libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx:47:11) at ../node_modules/@digdir/designsystemet-react/dist/cjs/components/form/Search/Search.js:53:15 at HTMLUnknownElement.callCallback (../node_modules/react-dom/cjs/react-dom.development.js:730:119) at HTMLUnknownElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLUnknownElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLUnknownElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLUnknownElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at Object.invokeGuardedCallbackDev (../node_modules/react-dom/cjs/react-dom.development.js:750:45) at invokeGuardedCallback (../node_modules/react-dom/cjs/react-dom.development.js:771:126) at invokeGuardedCallbackAndCatchFirstError (../node_modules/react-dom/cjs/react-dom.development.js:780:106) at executeDispatch (../node_modules/react-dom/cjs/react-dom.development.js:1672:237) at processDispatchQueueItemsInOrder (../node_modules/react-dom/cjs/react-dom.development.js:1672:1124) at processDispatchQueue (../node_modules/react-dom/cjs/react-dom.development.js:1672:1467) at dispatchEventsForPlugins (../node_modules/react-dom/cjs/react-dom.development.js:1674:300) at ../node_modules/react-dom/cjs/react-dom.development.js:1712:323 at batchedUpdates$1 (../node_modules/react-dom/cjs/react-dom.development.js:4446:410) at batchedUpdates (../node_modules/react-dom/cjs/react-dom.development.js:674:54) at dispatchEventForPluginEventSystem (../node_modules/react-dom/cjs/react-dom.development.js:1712:290) at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (../node_modules/react-dom/cjs/react-dom.development.js:1048:1988) at dispatchEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:1579) at dispatchDiscreteEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:850) at HTMLDivElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLInputElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLInputElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLInputElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at ../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:43 at ../node_modules/@testing-library/react/dist/pure.js:131:16 at ../node_modules/@testing-library/react/dist/act-compat.js:71:24 at act (../node_modules/react/cjs/react.development.js:2199:20) at ../node_modules/@testing-library/react/dist/act-compat.js:70:25 at Object.eventWrapper (../node_modules/@testing-library/react/dist/pure.js:130:28) at Object.wrapEvent (../node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:5:26) at Object.dispatchEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:20) at Object.dispatchUIEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:21:24) at commitInput (../node_modules/@testing-library/user-event/dist/cjs/event/input.js:151:12) at editInputElement (../node_modules/@test

Check failure on line 47 in frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx

View workflow job for this annotation

GitHub Actions / Testing

CodeListsActionsBar › calls handleSearchCodeLists when searching for code lists

TypeError: onSetCodeListSearchPattern is not a function at onSetCodeListSearchPattern (libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListPage/CodeListsActionsBar/CodeListsActionsBar.tsx:47:11) at ../node_modules/@digdir/designsystemet-react/dist/cjs/components/form/Search/Search.js:53:15 at HTMLUnknownElement.callCallback (../node_modules/react-dom/cjs/react-dom.development.js:730:119) at HTMLUnknownElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLUnknownElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLUnknownElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLUnknownElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at Object.invokeGuardedCallbackDev (../node_modules/react-dom/cjs/react-dom.development.js:750:45) at invokeGuardedCallback (../node_modules/react-dom/cjs/react-dom.development.js:771:126) at invokeGuardedCallbackAndCatchFirstError (../node_modules/react-dom/cjs/react-dom.development.js:780:106) at executeDispatch (../node_modules/react-dom/cjs/react-dom.development.js:1672:237) at processDispatchQueueItemsInOrder (../node_modules/react-dom/cjs/react-dom.development.js:1672:1124) at processDispatchQueue (../node_modules/react-dom/cjs/react-dom.development.js:1672:1467) at dispatchEventsForPlugins (../node_modules/react-dom/cjs/react-dom.development.js:1674:300) at ../node_modules/react-dom/cjs/react-dom.development.js:1712:323 at batchedUpdates$1 (../node_modules/react-dom/cjs/react-dom.development.js:4446:410) at batchedUpdates (../node_modules/react-dom/cjs/react-dom.development.js:674:54) at dispatchEventForPluginEventSystem (../node_modules/react-dom/cjs/react-dom.development.js:1712:290) at dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay (../node_modules/react-dom/cjs/react-dom.development.js:1048:1988) at dispatchEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:1579) at dispatchDiscreteEvent (../node_modules/react-dom/cjs/react-dom.development.js:1048:850) at HTMLDivElement.callTheUserObjectsOperation (../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) at innerInvokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25) at invokeEventListeners (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3) at HTMLInputElementImpl._dispatch (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9) at HTMLInputElementImpl.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:104:17) at HTMLInputElement.dispatchEvent (../node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34) at ../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:43 at ../node_modules/@testing-library/react/dist/pure.js:131:16 at ../node_modules/@testing-library/react/dist/act-compat.js:71:24 at act (../node_modules/react/cjs/react.development.js:2199:20) at ../node_modules/@testing-library/react/dist/act-compat.js:70:25 at Object.eventWrapper (../node_modules/@testing-library/react/dist/pure.js:130:28) at Object.wrapEvent (../node_modules/@testing-library/user-event/dist/cjs/event/wrapEvent.js:5:26) at Object.dispatchEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:44:20) at Object.dispatchUIEvent (../node_modules/@testing-library/user-event/dist/cjs/event/dispatchEvent.js:21:24) at commitInput (../node_modules/@testing-library/user-event/dist/cjs/event/input.js:151:12) at editInputElement (../node_modules/@test
}
clearButtonLabel={t('app_content_library.code_lists.clear_search_button_label')}
onClear={() => setCodeListSearchPattern('.*')}
onClear={() => onSetCodeListSearchPattern('.*')}
/>
<CreateNewCodeListModal onUpdateCodeList={onUpdateCodeList} codeListNames={codeListNames} />
<StudioFileUploader
Expand Down

0 comments on commit a136a1d

Please sign in to comment.