Skip to content

Commit 3efc2c4

Browse files
authored
Merge pull request #242 from CivicDataLab/240-update-dataset-creation-flow-as-per-new-designs
240 update dataset creation flow as per new designs
2 parents 0ab871a + 764bb53 commit 3efc2c4

File tree

16 files changed

+520
-427
lines changed

16 files changed

+520
-427
lines changed

app/[locale]/dashboard/[entityType]/[entitySlug]/components/title-bar.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
1-
import { useEffect, useState } from 'react';
21
import Link from 'next/link';
32
import { Button, Icon, Spinner, Text, TextField } from 'opub-ui';
3+
import { useEffect, useState } from 'react';
44

55
import { Icons } from '@/components/icons';
6-
import { useEditStatus } from '../usecases/edit/context';
76

87
interface TitleBarProps {
98
label: string;
109
title: string;
1110
goBackURL: string;
1211
onSave: (data: any) => void;
1312
loading: boolean;
14-
}
13+
status: 'loading' | 'success';
14+
setStatus: (s: 'loading' | 'success') => void;}
1515

1616
const TitleBar = ({
1717
label,
1818
title,
1919
goBackURL,
2020
onSave,
2121
loading,
22+
status,
23+
setStatus,
2224
}: TitleBarProps) => {
2325
const [edit, setEdit] = useState(false);
2426
const [titleData, setTitleData] = useState(title);
25-
const { status, setStatus } = useEditStatus();
2627

2728
useEffect(() => {
28-
setStatus(loading ? 'loading' : 'success'); // update based on mutation state
29+
setStatus(loading ? 'loading' : 'success');
2930
}, [loading]);
3031

3132
return (
@@ -73,7 +74,9 @@ const TitleBar = ({
7374
<div className="flex flex-wrap items-center gap-6 lg:flex-nowrap">
7475
<div className="flex flex-wrap items-center gap-2">
7576
{' '}
76-
<Text>{status === 'loading' ? 'Saving...' : 'All Changes Saved'}</Text>
77+
<Text>
78+
{status === 'loading' ? 'Saving...' : 'All Changes Saved'}
79+
</Text>
7780
{status === 'loading' ? (
7881
<Spinner size={20} />
7982
) : (

app/[locale]/dashboard/[entityType]/[entitySlug]/dataset/[id]/edit/components/EditLayout.tsx

Lines changed: 37 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
11
'use client';
22

3-
import { ReactNode, useEffect, useState } from 'react';
4-
import Link from 'next/link';
5-
import { useParams, usePathname, useRouter } from 'next/navigation';
63
import { graphql } from '@/gql';
74
import { UpdateDatasetInput } from '@/gql/generated/graphql';
85
import { useMutation, useQuery } from '@tanstack/react-query';
6+
import { useParams, usePathname, useRouter } from 'next/navigation';
97
import {
10-
Button,
11-
Divider,
12-
Form,
13-
FormLayout,
14-
Icon,
15-
Input,
168
Tab,
179
TabList,
1810
Tabs,
19-
Text,
20-
toast,
11+
toast
2112
} from 'opub-ui';
13+
import { ReactNode, useEffect, useState } from 'react';
2214

2315
import { GraphQL } from '@/lib/api';
24-
import { Icons } from '@/components/icons';
16+
import TitleBar from '../../../../components/title-bar';
17+
import { useDatasetEditStatus } from '../context';
2518

2619
const datasetQueryDoc: any = graphql(`
2720
query datasetTitleQuery($filters: DatasetFilter) {
@@ -57,7 +50,7 @@ interface LayoutProps {
5750
params: { id: string };
5851
}
5952

60-
const layoutList = ['metadata', 'access', 'charts', 'resources', 'publish'];
53+
const layoutList = ['metadata', 'resources', 'publish'];
6154

6255
export function EditLayout({ children, params }: LayoutProps) {
6356
// const { data } = useQuery([`dataset_layout_${params.id}`], () =>
@@ -117,6 +110,8 @@ export function EditLayout({ children, params }: LayoutProps) {
117110
return pathName.indexOf(v) >= 0;
118111
});
119112

113+
const { status, setStatus } = useDatasetEditStatus();
114+
120115
// if not from the layoutList, return children
121116
if (!pathItem) {
122117
return <>{children}</>;
@@ -127,13 +122,21 @@ export function EditLayout({ children, params }: LayoutProps) {
127122
{getDatasetTitleRes.isLoading ? (
128123
<></>
129124
) : (
130-
<Header
131-
dataset={getDatasetTitleRes?.data?.datasets[0]}
132-
orgId={routerParams.entitySlug}
133-
saveTitle={updateDatasetTitleMutation.mutate}
134-
editMode={editMode}
135-
setEditMode={setEditMode}
136-
entityType={routerParams.entityType}
125+
<TitleBar
126+
label={'DATASET NAME'}
127+
title={getDatasetTitleRes?.data?.datasets[0]?.title}
128+
goBackURL={`/dashboard/${routerParams.entityType}/${routerParams.entitySlug}/dataset`}
129+
onSave={(val) =>
130+
updateDatasetTitleMutation.mutate({
131+
updateDatasetInput: {
132+
dataset: routerParams.id,
133+
title: val,
134+
},
135+
})
136+
}
137+
loading={updateDatasetTitleMutation.isLoading}
138+
status={status}
139+
setStatus={setStatus}
137140
/>
138141
)}
139142
<div className="lg:flex-column mt-4 flex flex-col">
@@ -153,96 +156,6 @@ export function EditLayout({ children, params }: LayoutProps) {
153156
);
154157
}
155158

156-
const Header = ({
157-
dataset,
158-
orgId,
159-
saveTitle,
160-
editMode,
161-
setEditMode,
162-
entityType,
163-
}: any) => {
164-
return (
165-
<>
166-
<div className="mb-3 flex flex-wrap-reverse items-center justify-between gap-4 md:gap-4 lg:flex-nowrap lg:gap-12">
167-
{!editMode ? (
168-
<div className="flex items-center gap-4">
169-
<Text variant="headingSm" color="subdued">
170-
DATASET NAME : <b>{dataset?.title}</b>
171-
</Text>
172-
<Button
173-
kind="tertiary"
174-
icon={
175-
<Icon source={Icons.pencil} size={16} color="interactive" />
176-
}
177-
onClick={() => setEditMode(true)}
178-
>
179-
edit
180-
</Button>
181-
</div>
182-
) : (
183-
<div className="flex-grow">
184-
<Form
185-
onSubmit={(values: any) =>
186-
saveTitle({
187-
updateDatasetInput: {
188-
dataset: dataset.id,
189-
title: values.title,
190-
description: '',
191-
tags: [],
192-
},
193-
})
194-
}
195-
>
196-
<FormLayout>
197-
<div className="flex flex-wrap items-center gap-4">
198-
<Text variant="headingSm" color="subdued">
199-
DATASET NAME :
200-
</Text>
201-
<div className="flex-grow">
202-
<Input
203-
name="title"
204-
labelHidden
205-
label="Datset Title"
206-
defaultValue={
207-
dataset?.title !== ''
208-
? dataset?.title
209-
: `Untitled - ${new Date(
210-
dataset?.created
211-
).toLocaleDateString('en-IN', {
212-
month: 'long',
213-
day: 'numeric',
214-
year: 'numeric',
215-
})}`
216-
}
217-
/>
218-
</div>
219-
<div className="flex flex-row gap-4">
220-
<Button submit kind="primary">
221-
Save
222-
</Button>
223-
224-
<Button kind="tertiary" onClick={() => setEditMode(false)}>
225-
Cancel
226-
</Button>
227-
</div>
228-
</div>
229-
</FormLayout>
230-
</Form>
231-
</div>
232-
)}
233-
234-
<Link href={`/dashboard/${entityType}/${orgId}/dataset`}>
235-
<Text className="flex gap-1" color="interactive">
236-
Go back to Drafts{' '}
237-
<Icon source={Icons.cross} size={20} color="interactive" />
238-
</Text>
239-
</Link>
240-
</div>
241-
<Divider />
242-
</>
243-
);
244-
};
245-
246159
const Navigation = ({
247160
id,
248161
pathItem,
@@ -258,7 +171,13 @@ const Navigation = ({
258171

259172
let links = [
260173
{
261-
label: 'Resources',
174+
label: 'Metadata',
175+
id: 'metadata',
176+
url: `/dashboard/${entityType}/${organization}/dataset/${id}/edit/metadata`,
177+
// selected: pathItem === 'metadata',
178+
},
179+
{
180+
label: 'Data Files',
262181
id: 'resources',
263182
url: `/dashboard/${entityType}/${organization}/dataset/${id}/edit/resources`,
264183
// selected: pathItem === 'resources',
@@ -273,18 +192,13 @@ const Navigation = ({
273192
},
274193
]
275194
: []),
276-
{
277-
label: 'Charts',
278-
id: 'charts',
279-
url: `/dashboard/${entityType}/${organization}/dataset/${id}/edit/charts?type=list`,
280-
// selected: pathItem === 'charts',
281-
},
282-
{
283-
label: 'Metadata',
284-
id: 'metadata',
285-
url: `/dashboard/${entityType}/${organization}/dataset/${id}/edit/metadata`,
286-
// selected: pathItem === 'metadata',
287-
},
195+
// {
196+
// label: 'Charts',
197+
// id: 'charts',
198+
// url: `/dashboard/${entityType}/${organization}/dataset/${id}/edit/charts?type=list`,
199+
// // selected: pathItem === 'charts',
200+
// },
201+
288202
{
289203
label: 'Publish',
290204
id: 'publish',

0 commit comments

Comments
 (0)