Skip to content

Commit c3b47c3

Browse files
laurenbrissetteelvincheng3kaiyangzheng
authored
Fix style inconsistencies (#400)
* frontend changes on doc * fix instance edit mode * fix up icons * remove invalidate + revert success page temporarily * remove some unusued code, add loading indicator for form instances, change form instances color palette * fix nits --------- Co-authored-by: Elvin Cheng <elvincheng3@gmail.com> Co-authored-by: Kaiyang Zheng <kaiyang.zheng@gmail.com>
1 parent 3c89656 commit c3b47c3

File tree

10 files changed

+149
-48
lines changed

10 files changed

+149
-48
lines changed

apps/web/src/components/ActiveFormList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ export const ActiveFormList = ({ title }: { title: string }) => {
217217
<Status.Root
218218
size="lg"
219219
width="100px"
220-
colorPalette="yellow"
220+
colorPalette="green"
221221
>
222222
<Status.Indicator />
223223
Complete
@@ -226,7 +226,7 @@ export const ActiveFormList = ({ title }: { title: string }) => {
226226
<Status.Root
227227
size="lg"
228228
width="100px"
229-
colorPalette="green"
229+
colorPalette="yellow"
230230
>
231231
<Status.Indicator />
232232
Pending

apps/web/src/components/NavBar.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import {
1010
DropdownDownArrow,
1111
DropdownUpArrow,
1212
TemplateFolder,
13-
EmployeeDirectory,
13+
EmployeeDirectoryIcon,
1414
InstancesIcon,
15+
InstancesIconActive,
1516
} from 'apps/web/src/static/icons.tsx';
1617
import Link from 'next/link';
1718
import {
@@ -59,12 +60,14 @@ const icons = {
5960
testActive: <GrayPencilIcon boxSize="24px" mr="2" />,
6061
template: <TemplateFolder boxSize="24px" mr="2" fill="#5E5E5E" />,
6162
templateActive: <TemplateFolder boxSize="24px" mr="2" fill="black" />,
62-
employeeDirectory: <EmployeeDirectory boxSize="24px" mr="2" />,
63-
employeeDirectoryActive: <EmployeeDirectory boxSize="24px" mr="2" />,
64-
instances: <InstancesIcon boxSize="24px" mr="2" />,
65-
instancesActive: (
66-
<InstancesIcon boxSize="24px" mr="2" stroke="#5E5E5E" fill="#5E5E5E" />
63+
employeeDirectory: (
64+
<EmployeeDirectoryIcon boxSize="24px" mr="2" stroke="#5E5E5E" />
65+
),
66+
employeeDirectoryActive: (
67+
<EmployeeDirectoryIcon boxSize="24px" mr="2" stroke="black" />
6768
),
69+
instances: <InstancesIcon boxSize="24px" mr="2" />,
70+
instancesActive: <InstancesIconActive boxSize="24px" mr="2" />,
6871
};
6972

7073
type IconKeys = keyof typeof icons;

apps/web/src/components/createForm/FormButtons.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export const FormButtons = ({
6060
formInstanceName,
6161
formTemplate,
6262
formInstanceDescription,
63+
formInstanceUseId,
6364
} = useCreateFormInstance();
6465
const [createFormLoading, setCreateFormLoading] = useState(false);
6566
const { nextSignFormPage, signFormInstanceLoading } = useSignFormInstance();
@@ -212,6 +213,8 @@ export const FormButtons = ({
212213
type: 'error',
213214
duration: 3000,
214215
});
216+
217+
setCreateFormLoading(false);
215218
}
216219
});
217220
else if (type == FormInteractionType.EditFormTemplate) {
@@ -254,6 +257,9 @@ export const FormButtons = ({
254257
}
255258
});
256259
}
260+
261+
// always set loading to false
262+
setCreateFormLoading(false);
257263
};
258264

259265
/**
@@ -278,7 +284,7 @@ export const FormButtons = ({
278284

279285
setCreateFormLoading(true);
280286

281-
if (FormInteractionType.CreateFormInstance) {
287+
if (type == FormInteractionType.CreateFormInstance) {
282288
await createFormInstanceMutation
283289
.mutateAsync({
284290
body: {
@@ -400,8 +406,11 @@ export const FormButtons = ({
400406
case FormInteractionType.EditFormTemplate:
401407
_submitFormTemplate();
402408
break;
403-
default:
409+
case FormInteractionType.SignFormInstance:
404410
nextSignFormPage(submitLink, review);
411+
break;
412+
default:
413+
throw new Error('Invalid form interaction type');
405414
}
406415
}}
407416
>

apps/web/src/components/createForm/FormLayout.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,21 @@ export const FormLayout = ({
6565
flexDirection="column"
6666
justifyContent={'center'}
6767
alignItems={
68-
FormInteractionType.CreateFormInstance && pageNumber == 1
68+
type === FormInteractionType.CreateFormInstance && pageNumber === 1
6969
? 'auto'
7070
: 'center'
7171
}
7272
gap="20px"
7373
borderRadius="12px"
7474
border={
75-
FormInteractionType.CreateFormInstance && pageNumber == 1
75+
type === FormInteractionType.CreateFormInstance && pageNumber === 1
7676
? 'transparent'
7777
: '1px solid #E5E5E5'
7878
}
7979
height="auto"
8080
margin="16px 36px 16px 36px"
8181
backgroundColor={
82-
FormInteractionType.CreateFormInstance && pageNumber == 1
82+
type === FormInteractionType.CreateFormInstance && pageNumber === 1
8383
? 'transparent'
8484
: '#FFF'
8585
}
@@ -92,11 +92,11 @@ export const FormLayout = ({
9292
heading={
9393
type === FormInteractionType.CreateFormTemplate
9494
? 'Create form template'
95-
: type == FormInteractionType.CreateFormInstance
95+
: type === FormInteractionType.CreateFormInstance
9696
? 'Create form instance'
97-
: type == FormInteractionType.EditFormTemplate
97+
: type === FormInteractionType.EditFormTemplate
9898
? 'Edit form template'
99-
: type == FormInteractionType.EditFormInstance
99+
: type === FormInteractionType.EditFormInstance
100100
? 'Edit form instance'
101101
: 'Submit form'
102102
}

apps/web/src/components/createFormTemplate/UploadBox.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,12 @@ export const UploadBox = ({
3939
});
4040

4141
return (
42-
<Flex flexDirection="column" gap="20px">
42+
<Flex
43+
flexDirection="column"
44+
gap="20px"
45+
alignItems={'center'}
46+
justifyContent={'center'}
47+
>
4348
<Flex
4449
/* dashed bordered box */
4550
borderRadius="8px"
@@ -52,6 +57,7 @@ export const UploadBox = ({
5257
alignItems={'center'}
5358
backgroundColor={pdfFile ? '#F1F7FF' : '#FFF'}
5459
{...getRootProps()}
60+
width={'420px'}
5561
>
5662
<input {...getInputProps()} />
5763
<UploadIcon
@@ -84,7 +90,7 @@ export const UploadBox = ({
8490
textDecoration="underline"
8591
color="#1367EA"
8692
>
87-
Browse
93+
browse
8894
</Text>
8995
</Flex>
9096
<Text

apps/web/src/context/CreateFormTemplateContext.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ export const CreateFormTemplateProvider = ({ children }: any) => {
4343
if (
4444
!pdfFile &&
4545
router.pathname !== '/create-template/upload' &&
46-
router.pathname !== '/template-directory'
46+
router.pathname !== '/template-directory' &&
47+
router.pathname !== '/create-template/success'
4748
) {
4849
router.push('/create-template/upload');
4950
}

apps/web/src/context/SignFormInstanceContext.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ export const SignFormInstanceContextProvider = ({
5050
const [originalPdf, setOriginalPdf] = useState<ArrayBuffer | null>(null);
5151
const [modifiedPdf, setModifiedPdf] = useState<ArrayBuffer | null>(null);
5252
const [assignedGroupId, setAssignedGroupId] = useState<string>();
53+
const [signFormInstanceLoading, setSignFormInstanceLoading] = useState(false);
5354
const router = useRouter();
55+
5456
const signFormInstanceMutation = useMutation({
5557
...formInstancesControllerSignFormInstanceMutation(),
5658
onSuccess: async () => {
@@ -248,6 +250,8 @@ export const SignFormInstanceContextProvider = ({
248250
};
249251

250252
const submitPdf = async (submitLink: string, pdfDoc: PDFDocument) => {
253+
setSignFormInstanceLoading(true);
254+
251255
const form = pdfDoc.getForm();
252256
form.getFields().forEach((fieldOnForm) => {
253257
fieldOnForm.disableReadOnly();
@@ -265,9 +269,14 @@ export const SignFormInstanceContextProvider = ({
265269
},
266270
});
267271
if (res) {
268-
router.push(submitLink);
272+
router.push(submitLink).then(() => {
273+
setSignFormInstanceLoading(false);
274+
});
269275
}
270276
}
277+
278+
// in case of error, set loading to false
279+
setSignFormInstanceLoading(false);
271280
};
272281

273282
const nextSignFormPage = async (
@@ -298,7 +307,7 @@ export const SignFormInstanceContextProvider = ({
298307
groupNumber,
299308
nextSignFormPage,
300309
updateField,
301-
signFormInstanceLoading: isLoading,
310+
signFormInstanceLoading,
302311
}}
303312
>
304313
{children}

apps/web/src/pages/_app.tsx

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,12 @@ export default function App({
9090
const createFormTemplatePath = '/create-template';
9191
const createFormInstancePath = '/create-instance';
9292
const signFormInstancePath = '/sign-form';
93-
const excludeLayoutPaths = [
94-
'/signin',
95-
'/register',
96-
'/create-template/success',
97-
'/create-instance/success',
98-
];
93+
// paths that do not include layout or require context
94+
// success pages require context and no layout, so they are in a unique paths
95+
const excludeLayoutPaths = ['/signin', '/register', 'sign-form/success'];
96+
const createFormTemplateSuccessPath = '/create-template/success';
97+
const createFormInstanceSuccessPath = '/create-instance/success';
98+
9999
// to allow template context to be populated before moving into edit mode
100100
const formDirectoryPath = '/template-directory';
101101
const previewForm = '/preview-form';
@@ -136,6 +136,30 @@ export default function App({
136136
);
137137
}
138138

139+
if (appProps.router.pathname.includes(createFormTemplateSuccessPath)) {
140+
return (
141+
<>
142+
<WrapperComponent>
143+
<CreateFormTemplateProvider>
144+
<Component {...pageProps} />
145+
</CreateFormTemplateProvider>
146+
</WrapperComponent>
147+
</>
148+
);
149+
}
150+
151+
if (appProps.router.pathname.includes(createFormInstanceSuccessPath)) {
152+
return (
153+
<>
154+
<WrapperComponent>
155+
<CreateFormInstanceProvider>
156+
<Component {...pageProps} />
157+
</CreateFormInstanceProvider>
158+
</WrapperComponent>
159+
</>
160+
);
161+
}
162+
139163
if (appProps.router.pathname.includes(createFormTemplatePath)) {
140164
return (
141165
<>

apps/web/src/pages/create-instance/success.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,34 @@
11
import { Scope } from '@web/client/types.gen';
22
import { SuccessPage } from '@web/components/createForm/SuccessPage';
33
import isAuth from '@web/components/isAuth';
4+
import { useCreateFormInstance } from '@web/context/CreateFormInstanceContext';
45
import { useRouter } from 'next/router';
56

67
function Success() {
78
const router = useRouter();
9+
const { formInstanceUseId, setFormInstanceUseId } = useCreateFormInstance();
10+
// use id to indicate whether first creation or previous edit
11+
const create: Boolean = formInstanceUseId?.substring(0, 6) == 'create';
12+
13+
// navigates to edit mode
14+
function submit() {
15+
// remove create prefix if present
16+
if (create && formInstanceUseId) {
17+
setFormInstanceUseId(formInstanceUseId.substring(6));
18+
}
19+
// navigate to edit mode
20+
router.push('/create-instance/description');
21+
}
822

923
return (
1024
<SuccessPage
11-
message={'Your form instance has been created!'}
25+
message={
26+
create
27+
? 'Your form instance has been created!'
28+
: 'Your form instance has been updated!'
29+
}
1230
linkText={'Edit Form'}
13-
linkAction={() => router.push('/create-instance/description')}
31+
linkAction={submit}
1432
/>
1533
);
1634
}

0 commit comments

Comments
 (0)