Skip to content

Commit b03c144

Browse files
author
bhavabhuthi
committed
feat: add categories in form with save and pre-population
1 parent 1bfb820 commit b03c144

1 file changed

Lines changed: 89 additions & 43 deletions

File tree

  • app/[locale]/dashboard/organization/[organizationId]/dataset/[id]/edit/components

app/[locale]/dashboard/organization/[organizationId]/dataset/[id]/edit/components/EditMetadata.tsx

Lines changed: 89 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
'use client';
22

3+
import { useParams, useRouter } from 'next/navigation';
34
import { graphql } from '@/gql';
45
import {
6+
TypeCategory,
7+
TypeDataset,
58
TypeDatasetMetadata,
69
TypeMetadata,
7-
UpdateMetadataInput
10+
UpdateMetadataInput,
811
} from '@/gql/generated/graphql';
912
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
10-
import { useParams, useRouter } from 'next/navigation';
1113
import {
1214
Button,
1315
Combobox,
@@ -19,15 +21,28 @@ import {
1921
toast,
2022
} from 'opub-ui';
2123

22-
import { Loading } from '@/components/loading';
2324
import { GraphQL } from '@/lib/api';
25+
import { Loading } from '@/components/loading';
26+
27+
const categoriesListQueryDoc: any = graphql(`
28+
query CategoryList {
29+
categories {
30+
id
31+
name
32+
}
33+
}
34+
`);
2435

2536
const datasetMetadataQueryDoc: any = graphql(`
2637
query MetadataValues($filters: DatasetFilter) {
2738
datasets(filters: $filters) {
2839
title
2940
id
3041
description
42+
categories {
43+
id
44+
name
45+
}
3146
metadata {
3247
metadataItem {
3348
id
@@ -76,46 +91,44 @@ const updateMetadataMutationDoc: any = graphql(`
7691
}
7792
`);
7893

79-
export function EditMetadata({
80-
id,
81-
// defaultValues,
82-
// description,
83-
}: {
84-
id: string;
85-
// defaultValues: any;
86-
// description: string;
87-
}) {
88-
// const submitRef = React.useRef<HTMLButtonElement>(null);
89-
94+
export function EditMetadata({ id }: { id: string }) {
9095
const router = useRouter();
9196
const params = useParams();
9297

9398
const queryClient = useQueryClient();
9499

95-
const getMetaDataListQuery: { data: any; isLoading: boolean; refetch: any } =
96-
useQuery([`metadata_fields_list_${id}`], () =>
97-
GraphQL(metadataQueryDoc, {
98-
filters: {
99-
model: 'DATASET',
100-
enabled: true,
101-
},
102-
})
100+
const getCategoriesList: { data: any; isLoading: boolean; error: any } =
101+
useQuery([`categories_list_query`], () =>
102+
GraphQL(categoriesListQueryDoc, [])
103103
);
104104

105-
const getDatasetMetadata: { data: any; isLoading: boolean; refetch: any } =
106-
useQuery([`metadata_values_query_${id}`], () =>
107-
GraphQL(datasetMetadataQueryDoc, { filters: { id: id } })
108-
);
105+
const getMetaDataListQuery: {
106+
data: any;
107+
isLoading: boolean;
108+
refetch: Function;
109+
} = useQuery([`metadata_fields_list_${id}`], () =>
110+
GraphQL(metadataQueryDoc, {
111+
filters: {
112+
model: 'DATASET',
113+
enabled: true,
114+
},
115+
})
116+
);
117+
118+
const getDatasetMetadata: {
119+
data: any;
120+
isLoading: boolean;
121+
refetch: Function;
122+
error: any;
123+
} = useQuery([`metadata_values_query_${id}`], () =>
124+
GraphQL(datasetMetadataQueryDoc, { filters: { id: id } })
125+
);
109126

110127
const updateMetadataMutation = useMutation(
111128
(data: { UpdateMetadataInput: UpdateMetadataInput }) =>
112129
GraphQL(updateMetadataMutationDoc, data),
113130
{
114131
onSuccess: (data: any) => {
115-
// queryClient.invalidateQueries({
116-
// queryKey: [`create_dataset_${'52'}`],
117-
// });
118-
119132
toast('Details updated successfully!');
120133

121134
queryClient.invalidateQueries({
@@ -138,15 +151,28 @@ export function EditMetadata({
138151
}
139152
);
140153

141-
const defaultValuesPrepFn = (metadataArray: Array<TypeDatasetMetadata>) => {
154+
const defaultValuesPrepFn = (dataset: TypeDataset) => {
155+
// Function to set default values for the form
156+
142157
let defaultVal: {
143-
[key: string]: string | number | undefined;
158+
[key: string]: any;
144159
} = {};
145160

146-
metadataArray?.map((field) => {
161+
dataset.metadata?.map((field) => {
147162
defaultVal[field.metadataItem.id] = field.value;
148163
});
149164

165+
defaultVal['description'] = dataset.description || '';
166+
167+
defaultVal['categories'] = dataset.categories?.map(
168+
(category: TypeCategory) => {
169+
return {
170+
label: category.name,
171+
value: category.id,
172+
};
173+
}
174+
);
175+
150176
return defaultVal;
151177
};
152178

@@ -161,7 +187,7 @@ export function EditMetadata({
161187
...Object.keys(values)
162188
.filter(
163189
(valueItem) =>
164-
valueItem !== 'description' && valueItem !== 'tags'
190+
!['categories', 'description', 'tags'].includes(valueItem)
165191
)
166192
.map((key) => {
167193
return {
@@ -172,6 +198,8 @@ export function EditMetadata({
172198
],
173199
description: values.description || '',
174200
tags: values.tags || [],
201+
categories:
202+
values.categories?.map((item: any) => item.value) || [],
175203
},
176204
});
177205
}}
@@ -181,26 +209,44 @@ export function EditMetadata({
181209
keepDirtyValues: true,
182210
},
183211
defaultValues: defaultValuesPrepFn(
184-
getDatasetMetadata?.data?.datasets[0]?.metadata
212+
getDatasetMetadata.isLoading || getDatasetMetadata.error
213+
? {}
214+
: getDatasetMetadata?.data?.datasets[0]
185215
),
186216
}}
187217
>
188218
<>
189219
<div className="pt-3">
190220
<FormLayout>
191-
<Input
192-
key="description"
193-
multiline
194-
name="description"
195-
label={'Description'}
196-
defaultValue={getDatasetMetadata?.data?.datasets[0].description}
197-
/>
221+
<div className="w-full py-4 pr-4">
222+
<Input
223+
key="description"
224+
multiline
225+
name="description"
226+
label={'Description'}
227+
/>
228+
</div>
198229

199230
<div className="flex flex-wrap">
200231
<div className="w-full py-4 pr-4 sm:w-1/2 md:w-1/2 lg:w-1/2 xl:w-1/2">
201232
<Combobox name={'tags'} list={[]} label={'Tags'} />
202233
</div>
203-
<div className="w-full py-4 pr-4 sm:w-1/2 md:w-1/2 lg:w-1/2 xl:w-1/2"></div>
234+
<div className="w-full py-4 pr-4 sm:w-1/2 md:w-1/2 lg:w-1/2 xl:w-1/2">
235+
<Combobox
236+
displaySelected
237+
label="Categories"
238+
list={
239+
getCategoriesList.isLoading || getCategoriesList.error
240+
? []
241+
: getCategoriesList.data?.categories?.map(
242+
(item: TypeCategory) => {
243+
return { label: item.name, value: item.id };
244+
}
245+
) || []
246+
}
247+
name="categories"
248+
/>
249+
</div>
204250
</div>
205251

206252
{getMetaDataListQuery.isLoading ? (

0 commit comments

Comments
 (0)