@openmrs/esm-form-builder-app 2.1.1-pre.621 → 2.1.1-pre.626

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,7 +69,7 @@
69
69
  "auxiliaryFiles": [
70
70
  "153.js.map"
71
71
  ],
72
- "hash": "9b32a76f7b416600",
72
+ "hash": "1feb363b8fb039cb",
73
73
  "childrenByOrder": {}
74
74
  },
75
75
  {
@@ -124,153 +124,7 @@
124
124
  "auxiliaryFiles": [
125
125
  "main.js.map"
126
126
  ],
127
- "hash": "df47081479a0e060",
128
- "childrenByOrder": {}
129
- },
130
- {
131
- "rendered": true,
132
- "initial": false,
133
- "entry": false,
134
- "recorded": false,
135
- "size": 3602,
136
- "sizes": {
137
- "javascript": 3602
138
- },
139
- "names": [],
140
- "idHints": [],
141
- "runtime": [
142
- "@openmrs/esm-form-builder-app",
143
- "main"
144
- ],
145
- "files": [
146
- "256.js"
147
- ],
148
- "auxiliaryFiles": [
149
- "256.js.map"
150
- ],
151
- "hash": "d4d5b35efe1d8ede",
152
- "childrenByOrder": {}
153
- },
154
- {
155
- "rendered": true,
156
- "initial": false,
157
- "entry": false,
158
- "recorded": false,
159
- "size": 311791,
160
- "sizes": {
161
- "javascript": 311749,
162
- "consume-shared": 42
163
- },
164
- "names": [],
165
- "idHints": [],
166
- "runtime": [
167
- "@openmrs/esm-form-builder-app",
168
- "main"
169
- ],
170
- "files": [
171
- "259.js"
172
- ],
173
- "auxiliaryFiles": [
174
- "259.js.map"
175
- ],
176
- "hash": "bed10a78d6da8766",
177
- "childrenByOrder": {}
178
- },
179
- {
180
- "rendered": true,
181
- "initial": false,
182
- "entry": false,
183
- "recorded": false,
184
- "size": 7103,
185
- "sizes": {
186
- "javascript": 7103
187
- },
188
- "names": [],
189
- "idHints": [],
190
- "runtime": [
191
- "@openmrs/esm-form-builder-app",
192
- "main"
193
- ],
194
- "files": [
195
- "294.js"
196
- ],
197
- "auxiliaryFiles": [
198
- "294.js.map"
199
- ],
200
- "hash": "b314e60f1c149ba9",
201
- "childrenByOrder": {}
202
- },
203
- {
204
- "rendered": true,
205
- "initial": false,
206
- "entry": false,
207
- "recorded": false,
208
- "size": 9323,
209
- "sizes": {
210
- "javascript": 9323
211
- },
212
- "names": [],
213
- "idHints": [],
214
- "runtime": [
215
- "@openmrs/esm-form-builder-app",
216
- "main"
217
- ],
218
- "files": [
219
- "319.js"
220
- ],
221
- "auxiliaryFiles": [],
222
- "hash": "791ee4cd0cc89d0b",
223
- "childrenByOrder": {}
224
- },
225
- {
226
- "rendered": true,
227
- "initial": false,
228
- "entry": false,
229
- "recorded": false,
230
- "size": 984,
231
- "sizes": {
232
- "javascript": 984
233
- },
234
- "names": [],
235
- "idHints": [],
236
- "runtime": [
237
- "@openmrs/esm-form-builder-app",
238
- "main"
239
- ],
240
- "files": [
241
- "447.js"
242
- ],
243
- "auxiliaryFiles": [
244
- "447.js.map"
245
- ],
246
- "hash": "40f540e9c6d5d988",
247
- "childrenByOrder": {}
248
- },
249
- {
250
- "rendered": true,
251
- "initial": false,
252
- "entry": false,
253
- "recorded": false,
254
- "reason": "split chunk (cache group: defaultVendors)",
255
- "size": 2552869,
256
- "sizes": {
257
- "javascript": 2552869
258
- },
259
- "names": [],
260
- "idHints": [
261
- "vendors"
262
- ],
263
- "runtime": [
264
- "@openmrs/esm-form-builder-app",
265
- "main"
266
- ],
267
- "files": [
268
- "501.js"
269
- ],
270
- "auxiliaryFiles": [
271
- "501.js.map"
272
- ],
273
- "hash": "6fda22fd27ff1fcc",
127
+ "hash": "b01cd6507e5262b4",
274
128
  "childrenByOrder": {}
275
129
  },
276
130
  {
@@ -279,9 +133,9 @@
279
133
  "entry": false,
280
134
  "recorded": false,
281
135
  "reason": "split chunk (cache group: defaultVendors)",
282
- "size": 2966594,
136
+ "size": 2970520,
283
137
  "sizes": {
284
- "javascript": 2966594
138
+ "javascript": 2970520
285
139
  },
286
140
  "names": [],
287
141
  "idHints": [
@@ -292,7 +146,7 @@
292
146
  "main"
293
147
  ],
294
148
  "files": [
295
- "515.js"
149
+ "223.js"
296
150
  ],
297
151
  "auxiliaryFiles": [
298
152
  "002a2ac7b7d3b3b807ddcb210cfc91eb.js",
@@ -358,6 +212,7 @@
358
212
  "2091e4c01015d7dda392116f3ae59801.js",
359
213
  "211511e7b374f57ad31acaf49dbdccb1.js",
360
214
  "2184bcd361a0e38d249bc49439d994cb.js",
215
+ "223.js.map",
361
216
  "2272c6632c52c3e402ab27b8045ab8f1.js",
362
217
  "23602ad4c88f0f19e7a0a12454ebf556.js",
363
218
  "23bb1a9f279e7a732bfd405350aab114.js",
@@ -457,7 +312,6 @@
457
312
  "4f89e8c1a691faf5f1bfe3987ddf108a.js",
458
313
  "5061ac5e99882b9f26051a5d73c75271.js",
459
314
  "50bd9a652785963a5d7d24bda4dee4ca.js",
460
- "515.js.map",
461
315
  "51f903c5ce5284a63196247cffb5ca40.js",
462
316
  "52c9726f9e52ed3a57c0634718366029.js",
463
317
  "52ee9d28ed4c3389951a46084343a993.js",
@@ -740,7 +594,153 @@
740
594
  "ffb6d262efb0718a20d60b5fecb76ea6.js",
741
595
  "ffd3b83e8b5878f4785591ff54b1dfff.js"
742
596
  ],
743
- "hash": "3331e578ed1045e2",
597
+ "hash": "bb6a01952667b7a9",
598
+ "childrenByOrder": {}
599
+ },
600
+ {
601
+ "rendered": true,
602
+ "initial": false,
603
+ "entry": false,
604
+ "recorded": false,
605
+ "size": 3602,
606
+ "sizes": {
607
+ "javascript": 3602
608
+ },
609
+ "names": [],
610
+ "idHints": [],
611
+ "runtime": [
612
+ "@openmrs/esm-form-builder-app",
613
+ "main"
614
+ ],
615
+ "files": [
616
+ "256.js"
617
+ ],
618
+ "auxiliaryFiles": [
619
+ "256.js.map"
620
+ ],
621
+ "hash": "d4d5b35efe1d8ede",
622
+ "childrenByOrder": {}
623
+ },
624
+ {
625
+ "rendered": true,
626
+ "initial": false,
627
+ "entry": false,
628
+ "recorded": false,
629
+ "size": 312184,
630
+ "sizes": {
631
+ "javascript": 312142,
632
+ "consume-shared": 42
633
+ },
634
+ "names": [],
635
+ "idHints": [],
636
+ "runtime": [
637
+ "@openmrs/esm-form-builder-app",
638
+ "main"
639
+ ],
640
+ "files": [
641
+ "259.js"
642
+ ],
643
+ "auxiliaryFiles": [
644
+ "259.js.map"
645
+ ],
646
+ "hash": "5e836aeeece80092",
647
+ "childrenByOrder": {}
648
+ },
649
+ {
650
+ "rendered": true,
651
+ "initial": false,
652
+ "entry": false,
653
+ "recorded": false,
654
+ "size": 7103,
655
+ "sizes": {
656
+ "javascript": 7103
657
+ },
658
+ "names": [],
659
+ "idHints": [],
660
+ "runtime": [
661
+ "@openmrs/esm-form-builder-app",
662
+ "main"
663
+ ],
664
+ "files": [
665
+ "294.js"
666
+ ],
667
+ "auxiliaryFiles": [
668
+ "294.js.map"
669
+ ],
670
+ "hash": "b314e60f1c149ba9",
671
+ "childrenByOrder": {}
672
+ },
673
+ {
674
+ "rendered": true,
675
+ "initial": false,
676
+ "entry": false,
677
+ "recorded": false,
678
+ "size": 9293,
679
+ "sizes": {
680
+ "javascript": 9293
681
+ },
682
+ "names": [],
683
+ "idHints": [],
684
+ "runtime": [
685
+ "@openmrs/esm-form-builder-app",
686
+ "main"
687
+ ],
688
+ "files": [
689
+ "319.js"
690
+ ],
691
+ "auxiliaryFiles": [],
692
+ "hash": "5636b451deeba091",
693
+ "childrenByOrder": {}
694
+ },
695
+ {
696
+ "rendered": true,
697
+ "initial": false,
698
+ "entry": false,
699
+ "recorded": false,
700
+ "size": 984,
701
+ "sizes": {
702
+ "javascript": 984
703
+ },
704
+ "names": [],
705
+ "idHints": [],
706
+ "runtime": [
707
+ "@openmrs/esm-form-builder-app",
708
+ "main"
709
+ ],
710
+ "files": [
711
+ "447.js"
712
+ ],
713
+ "auxiliaryFiles": [
714
+ "447.js.map"
715
+ ],
716
+ "hash": "40f540e9c6d5d988",
717
+ "childrenByOrder": {}
718
+ },
719
+ {
720
+ "rendered": true,
721
+ "initial": false,
722
+ "entry": false,
723
+ "recorded": false,
724
+ "reason": "split chunk (cache group: defaultVendors)",
725
+ "size": 2552869,
726
+ "sizes": {
727
+ "javascript": 2552869
728
+ },
729
+ "names": [],
730
+ "idHints": [
731
+ "vendors"
732
+ ],
733
+ "runtime": [
734
+ "@openmrs/esm-form-builder-app",
735
+ "main"
736
+ ],
737
+ "files": [
738
+ "501.js"
739
+ ],
740
+ "auxiliaryFiles": [
741
+ "501.js.map"
742
+ ],
743
+ "hash": "6fda22fd27ff1fcc",
744
744
  "childrenByOrder": {}
745
745
  },
746
746
  {
@@ -775,9 +775,9 @@
775
775
  "initial": false,
776
776
  "entry": false,
777
777
  "recorded": false,
778
- "size": 9238,
778
+ "size": 9208,
779
779
  "sizes": {
780
- "javascript": 9238
780
+ "javascript": 9208
781
781
  },
782
782
  "names": [],
783
783
  "idHints": [],
@@ -789,7 +789,7 @@
789
789
  "574.js"
790
790
  ],
791
791
  "auxiliaryFiles": [],
792
- "hash": "524559e653f471f5",
792
+ "hash": "f7fb7d49cfc0d124",
793
793
  "childrenByOrder": {}
794
794
  },
795
795
  {
@@ -818,9 +818,9 @@
818
818
  "initial": false,
819
819
  "entry": false,
820
820
  "recorded": false,
821
- "size": 9323,
821
+ "size": 9293,
822
822
  "sizes": {
823
- "javascript": 9323
823
+ "javascript": 9293
824
824
  },
825
825
  "names": [],
826
826
  "idHints": [],
@@ -832,7 +832,7 @@
832
832
  "757.js"
833
833
  ],
834
834
  "auxiliaryFiles": [],
835
- "hash": "d1c5b8f9c53012a6",
835
+ "hash": "dc0b6206faa09706",
836
836
  "childrenByOrder": {}
837
837
  },
838
838
  {
@@ -840,9 +840,9 @@
840
840
  "initial": false,
841
841
  "entry": false,
842
842
  "recorded": false,
843
- "size": 9323,
843
+ "size": 9293,
844
844
  "sizes": {
845
- "javascript": 9323
845
+ "javascript": 9293
846
846
  },
847
847
  "names": [],
848
848
  "idHints": [],
@@ -854,7 +854,7 @@
854
854
  "788.js"
855
855
  ],
856
856
  "auxiliaryFiles": [],
857
- "hash": "70dc49c1a5135689",
857
+ "hash": "99d9c4c64629db69",
858
858
  "childrenByOrder": {}
859
859
  },
860
860
  {
@@ -889,9 +889,9 @@
889
889
  "initial": false,
890
890
  "entry": false,
891
891
  "recorded": false,
892
- "size": 9323,
892
+ "size": 9293,
893
893
  "sizes": {
894
- "javascript": 9323
894
+ "javascript": 9293
895
895
  },
896
896
  "names": [],
897
897
  "idHints": [],
@@ -903,7 +903,7 @@
903
903
  "807.js"
904
904
  ],
905
905
  "auxiliaryFiles": [],
906
- "hash": "fc9feae6d4b64b5e",
906
+ "hash": "72cccdd76e06f658",
907
907
  "childrenByOrder": {}
908
908
  },
909
909
  {
@@ -911,9 +911,9 @@
911
911
  "initial": false,
912
912
  "entry": false,
913
913
  "recorded": false,
914
- "size": 9323,
914
+ "size": 9293,
915
915
  "sizes": {
916
- "javascript": 9323
916
+ "javascript": 9293
917
917
  },
918
918
  "names": [],
919
919
  "idHints": [],
@@ -925,7 +925,7 @@
925
925
  "833.js"
926
926
  ],
927
927
  "auxiliaryFiles": [],
928
- "hash": "f5a0df4d38d517f6",
928
+ "hash": "08f084e1a4c42962",
929
929
  "childrenByOrder": {}
930
930
  },
931
931
  {
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":"^1.2.0","webservices.rest":"^2.2.0"},"pages":[{"component":"root","route":"form-builder","online":true,"offline":true,"order":1}],"extensions":[{"name":"system-administration-form-builder-card-link","slot":"system-admin-page-card-link-slot","component":"systemAdministrationFormBuilderCardLink","online":true,"offline":true}],"version":"2.1.1-pre.621"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":"^1.2.0","webservices.rest":"^2.2.0"},"pages":[{"component":"root","route":"form-builder","online":true,"offline":true,"order":1}],"extensions":[{"name":"system-administration-form-builder-card-link","slot":"system-admin-page-card-link-slot","component":"systemAdministrationFormBuilderCardLink","online":true,"offline":true}],"version":"2.1.1-pre.626"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-form-builder-app",
3
- "version": "2.1.1-pre.621",
3
+ "version": "2.1.1-pre.626",
4
4
  "license": "MPL-2.0",
5
5
  "description": "OpenMRS ESM Form Builder App",
6
6
  "browser": "dist/openmrs-esm-form-builder-app.js",
@@ -53,6 +53,7 @@
53
53
  "@openmrs/openmrs-form-engine-lib": "next",
54
54
  "dotenv": "^16.3.1",
55
55
  "file-loader": "^6.2.0",
56
+ "fuzzy": "^0.1.3",
56
57
  "lodash-es": "^4.17.21",
57
58
  "react-ace": "^10.1.0",
58
59
  "sass": "^1.67.0"
@@ -1,4 +1,5 @@
1
1
  import React, { useCallback, useMemo, useState } from 'react';
2
+ import fuzzy from 'fuzzy';
2
3
  import type { TFunction } from 'i18next';
3
4
  import { useTranslation } from 'react-i18next';
4
5
  import {
@@ -35,10 +36,11 @@ import {
35
36
  useConfig,
36
37
  useLayoutType,
37
38
  usePagination,
39
+ useDebounce,
38
40
  } from '@openmrs/esm-framework';
39
41
  import type { KeyedMutator } from 'swr';
40
42
 
41
- import type { Form as FormType } from '../../types';
43
+ import type { Form as TypedForm } from '../../types';
42
44
  import { deleteForm } from '../../forms.resource';
43
45
  import { FormBuilderPagination } from '../pagination';
44
46
  import { useClobdata } from '../../hooks/useClobdata';
@@ -49,19 +51,19 @@ import styles from './dashboard.scss';
49
51
 
50
52
  type Mutator = KeyedMutator<{
51
53
  data: {
52
- results: Array<FormType>;
54
+ results: Array<TypedForm>;
53
55
  };
54
56
  }>;
55
57
 
56
58
  interface ActionButtonsProps {
57
- form: FormType;
59
+ form: TypedForm;
58
60
  mutate: Mutator;
59
61
  responsiveSize: string;
60
62
  t: TFunction;
61
63
  }
62
64
 
63
65
  interface FormsListProps {
64
- forms: Array<FormType>;
66
+ forms: Array<TypedForm>;
65
67
  isValidating: boolean;
66
68
  mutate: Mutator;
67
69
  t: TFunction;
@@ -245,28 +247,41 @@ function ActionButtons({ form, mutate, responsiveSize, t }: ActionButtonsProps)
245
247
  }
246
248
 
247
249
  function FormsList({ forms, isValidating, mutate, t }: FormsListProps) {
250
+ const pageSize = 10;
248
251
  const config = useConfig();
249
252
  const isTablet = useLayoutType() === 'tablet';
250
253
  const responsiveSize = isTablet ? 'lg' : 'sm';
251
254
  const [filter, setFilter] = useState('');
252
- const [searchString, setSearchString] = useState('');
253
- const pageSize = 10;
255
+ const [searchTerm, setSearchTerm] = useState('');
256
+ const debouncedSearchTerm = useDebounce(searchTerm);
254
257
 
255
- const filteredRows = useMemo(() => {
256
- if (!filter) {
257
- return forms;
258
- }
258
+ const filteredForms: Array<TypedForm> = useMemo(() => {
259
+ if (!debouncedSearchTerm) {
260
+ if (filter === 'Retired') {
261
+ return forms.filter((form) => form.retired);
262
+ }
259
263
 
260
- if (filter === 'Published') {
261
- return forms.filter((form) => form.published);
262
- }
264
+ if (filter === 'Published') {
265
+ return forms.filter((form) => form.published);
266
+ }
267
+
268
+ if (filter === 'Unpublished') {
269
+ return forms.filter((form) => !form.published);
270
+ }
263
271
 
264
- if (filter === 'Unpublished') {
265
- return forms.filter((form) => !form.published);
272
+ return forms;
266
273
  }
267
274
 
268
- return forms;
269
- }, [filter, forms]);
275
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
276
+ return debouncedSearchTerm
277
+ ? fuzzy
278
+ .filter(debouncedSearchTerm, forms, {
279
+ extract: (form: TypedForm) => `${form.name} ${form.version}`,
280
+ })
281
+ .sort((r1, r2) => r1.score - r2.score)
282
+ .map((result) => result.original as unknown as TypedForm)
283
+ : forms;
284
+ }, [filter, forms, debouncedSearchTerm]);
270
285
 
271
286
  const tableHeaders = [
272
287
  {
@@ -291,17 +306,9 @@ function FormsList({ forms, isValidating, mutate, t }: FormsListProps) {
291
306
  },
292
307
  ];
293
308
 
294
- const searchResults = useMemo(() => {
295
- if (searchString && searchString.trim() !== '') {
296
- return filteredRows.filter((form) => form.name.toLowerCase().includes(searchString.toLowerCase()));
297
- }
298
-
299
- return filteredRows;
300
- }, [searchString, filteredRows]);
301
-
302
- const { paginated, goTo, results, currentPage } = usePagination(searchResults, pageSize);
309
+ const { paginated, goTo, results, currentPage } = usePagination(filteredForms, pageSize);
303
310
 
304
- const tableRows = results?.map((form: FormType) => ({
311
+ const tableRows = results?.map((form: TypedForm) => ({
305
312
  ...form,
306
313
  id: form?.uuid,
307
314
  published: <CustomTag condition={form.published} />,
@@ -309,15 +316,7 @@ function FormsList({ forms, isValidating, mutate, t }: FormsListProps) {
309
316
  actions: <ActionButtons form={form} mutate={mutate} responsiveSize={responsiveSize} t={t} />,
310
317
  }));
311
318
 
312
- const handlePublishStatusChange = ({ selectedItem }: { selectedItem: string }) => setFilter(selectedItem);
313
-
314
- const handleSearch = useCallback(
315
- (e: React.ChangeEvent<HTMLInputElement>) => {
316
- goTo(1);
317
- setSearchString(e.target.value);
318
- },
319
- [goTo, setSearchString],
320
- );
319
+ const handleFilter = ({ selectedItem }: { selectedItem: string }) => setFilter(selectedItem);
321
320
 
322
321
  return (
323
322
  <>
@@ -338,11 +337,11 @@ function FormsList({ forms, isValidating, mutate, t }: FormsListProps) {
338
337
  id="publishStatusFilter"
339
338
  initialSelectedItem={'All'}
340
339
  label=""
341
- titleText={t('filterByPublishedStatus', 'Filter by publish status') + ':'}
340
+ titleText={t('filterBy', 'Filter by') + ':'}
342
341
  size={responsiveSize}
343
342
  type="inline"
344
- items={['All', 'Published', 'Unpublished']}
345
- onChange={handlePublishStatusChange}
343
+ items={['All', 'Published', 'Unpublished', 'Retired']}
344
+ onChange={handleFilter}
346
345
  />
347
346
  </div>
348
347
  <div className={styles.backgroundDataFetchingIndicator}>
@@ -358,7 +357,7 @@ function FormsList({ forms, isValidating, mutate, t }: FormsListProps) {
358
357
  <TableToolbarContent className={styles.headerContainer}>
359
358
  <TableToolbarSearch
360
359
  className={styles.searchbox}
361
- onChange={handleSearch}
360
+ onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}
362
361
  placeholder={t('searchThisList', 'Search this list')}
363
362
  />
364
363
  <Button
@@ -412,7 +411,7 @@ function FormsList({ forms, isValidating, mutate, t }: FormsListProps) {
412
411
  {paginated && (
413
412
  <FormBuilderPagination
414
413
  currentItems={results.length}
415
- totalItems={searchResults.length}
414
+ totalItems={filteredForms.length}
416
415
  onPageNumberChange={({ page }) => {
417
416
  goTo(page);
418
417
  }}
@@ -27,7 +27,7 @@
27
27
  height: layout.$spacing-09;
28
28
  }
29
29
  }
30
-
30
+
31
31
  :global(.omrs-breakpoint-gt-tablet) {
32
32
  .toolbarWrapper {
33
33
  height: layout.$spacing-07;
@@ -96,7 +96,7 @@
96
96
  :global(.cds--table-toolbar) {
97
97
  position: relative;
98
98
  height: 2rem;
99
- min-height: 0rem;
99
+ min-height: 0rem;
100
100
  overflow: visible;
101
101
  top: 0;
102
102
  }
@@ -104,6 +104,11 @@
104
104
  &:global(.cds--data-table-container) {
105
105
  padding-top: 0rem;
106
106
  }
107
+
108
+ // FIXME: This override should be moved to esm-styleguide
109
+ :global(.cds--btn--icon-only) {
110
+ padding-block-start: 0.5rem;
111
+ }
107
112
  }
108
113
 
109
114
  .filterContainer {
@@ -108,7 +108,7 @@ describe('Dashboard', () => {
108
108
  await waitForLoadingToFinish();
109
109
 
110
110
  const publishStatusFilter = screen.getByRole('combobox', {
111
- name: /filter by publish status/i,
111
+ name: /filter by/i,
112
112
  });
113
113
 
114
114
  await waitFor(() => user.click(publishStatusFilter));
@@ -142,7 +142,7 @@ describe('Dashboard', () => {
142
142
  await waitForLoadingToFinish();
143
143
 
144
144
  expect(screen.getByRole('heading', { name: /form builder/i })).toBeInTheDocument();
145
- expect(screen.getByRole('combobox', { name: /filter by publish status/i })).toBeInTheDocument();
145
+ expect(screen.getByRole('combobox', { name: /filter by/i })).toBeInTheDocument();
146
146
  expect(screen.getByRole('button', { name: /create a new form/i })).toBeInTheDocument();
147
147
  expect(screen.getByRole('button', { name: /edit schema/i })).toBeInTheDocument();
148
148
  expect(screen.getByRole('button', { name: /download schema/i })).toBeInTheDocument();
File without changes