Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 51 additions & 50 deletions CHANGELOG.md

Large diffs are not rendered by default.

11 changes: 2 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,13 @@ Notable features include:
- 19 different form field types, including attachments, tables, email and mobile
- Verified email and mobile phone fields via integrations with Twilio and AWS SES
- Automatic emailing of submissions for forms built with Email Mode
- End-to-end encryption for forms built with Storage Mode
- Encryption for data collected on forms built with Storage Mode
- (Singapore government agencies only) Citizen authentication with [SingPass](https://www.singpass.gov.sg/singpass/common/aboutus)
- (Singapore government agencies only) Citizen authentication with [sgID](https://www.id.gov.sg/)
- (Singapore government agencies only) Corporate authentication with [CorpPass](https://www.corppass.gov.sg/corppass/common/aboutus)
- (Singapore government agencies only) Automatic prefill of verified data with [MyInfo](https://www.singpass.gov.sg/myinfo/common/aboutus)
- Webhooks functionality via the official [FormSG JavaScript SDK](https://github.com/opengovsg/formsg-sdk) and contributor-supported [FormSG Ruby SDK](https://github.com/opengovsg/formsg-ruby-sdk)

The current product roadmap includes:

- (in progress) Frontend rewrite from [AngularJS](https://angularjs.org/) to [React](https://reactjs.org/)
- Enabling payments on forms
- Electronic signatures
- Notifications to form admins for Storage mode submissions
- Integration with vault.gov.sg
- Variable amount and Itemised payments on forms with [stripe](https://stripe.com) integration

## Local Development (Docker)

Expand Down
7 changes: 7 additions & 0 deletions __tests__/unit/backend/helpers/jest-db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
IPopulatedForm,
ISubmissionSchema,
IUserSchema,
UserApiToken,
} from 'src/types'

/**
Expand Down Expand Up @@ -88,18 +89,21 @@ const insertUser = async ({
userId,
mailDomain = 'test.gov.sg',
mailName = 'test',
apiToken,
}: {
agencyId: ObjectID
userId?: ObjectID
mailName?: string
mailDomain?: string
apiToken?: UserApiToken
}): Promise<IUserSchema> => {
const User = getUserModel(mongoose)

return User.create({
email: `${mailName}@${mailDomain}`,
_id: userId,
agency: agencyId,
apiToken: apiToken,
})
}

Expand All @@ -116,13 +120,15 @@ const insertFormCollectionReqs = async ({
shortName = 'govtest',
flags,
betaFlags,
apiToken,
}: {
userId?: ObjectID
mailName?: string
mailDomain?: string
shortName?: string
flags?: { lastSeenFeatureUpdateVersion: number }
betaFlags?: IUserSchema['betaFlags']
apiToken?: UserApiToken
} = {}): Promise<{
agency: AgencyDocument
user: IUserSchema
Expand All @@ -137,6 +143,7 @@ const insertFormCollectionReqs = async ({
agency: agency._id,
flags,
betaFlags,
apiToken,
})

return { agency, user }
Expand Down
4 changes: 2 additions & 2 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "form-frontend",
"version": "6.69.0",
"version": "6.70.0",
"homepage": ".",
"private": true,
"dependencies": {
Expand Down
54 changes: 39 additions & 15 deletions frontend/src/app/App.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import React from 'react'
import { Inspector, InspectParams } from 'react-dev-inspector'
import { HelmetProvider } from 'react-helmet-async'
import { QueryClient, QueryClientProvider } from 'react-query'
import { ReactQueryDevtools } from 'react-query/devtools'
Expand Down Expand Up @@ -40,18 +42,40 @@ datadogLogs.init({
sampleRate: 100,
})

export const App = (): JSX.Element => (
<HelmetProvider>
<QueryClientProvider client={queryClient}>
<ReactQueryDevtools initialIsOpen={false} />
<AppHelmet />
<BrowserRouter>
<ChakraProvider theme={theme} resetCSS>
<AuthProvider>
<AppRouter />
</AuthProvider>
</ChakraProvider>
</BrowserRouter>
</QueryClientProvider>
</HelmetProvider>
)
export const App = (): JSX.Element => {
const isDev = process.env.NODE_ENV === 'development'

return (
<>
{isDev && (
<Inspector
// props see docs:
// https://github.com/zthxxx/react-dev-inspector#inspector-component-props
keys={['control', 'shift', 'c']}
disableLaunchEditor={true}
onClickElement={({ codeInfo }: InspectParams) => {
if (!codeInfo?.absolutePath) return
const { absolutePath, lineNumber, columnNumber } = codeInfo
// you can change the url protocol if you are using in Web IDE
window.open(
`vscode://file/${absolutePath}:${lineNumber}:${columnNumber}`,
)
}}
/>
)}
<HelmetProvider>
<QueryClientProvider client={queryClient}>
<ReactQueryDevtools initialIsOpen={false} />
<AppHelmet />
<BrowserRouter>
<ChakraProvider theme={theme} resetCSS>
<AuthProvider>
<AppRouter />
</AuthProvider>
</ChakraProvider>
</BrowserRouter>
</QueryClientProvider>
</HelmetProvider>
</>
)
}
Loading