Skip to content

Commit

Permalink
Merge pull request #194 from rafalfigura/fix-file-upload
Browse files Browse the repository at this point in the history
[qwik] Form data file upload fix for #142
  • Loading branch information
fabian-hiller authored Apr 30, 2024
2 parents 23f613f + c347c46 commit b9c98a6
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 185 deletions.
5 changes: 5 additions & 0 deletions packages/qwik/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

All notable changes to the library will be documented in this file.

## vX.X.X (Month DD, YYYY)

- Replace `getFormDataValues` util with `decode-formdata` package
- Change `FormData` access in `formActionQrl` to `event.sharedMap.get('@actionFormData')` (pull request #194)

## v0.23.1 (January 19, 2023)

- Fix `FieldElementProps` type by using `QRL` for functions (issue #168)
Expand Down
11 changes: 7 additions & 4 deletions packages/qwik/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@
"lint": "eslint \"src/**/*.ts*\" && tsc --noEmit",
"publish": "npm publish"
},
"dependencies": {
"decode-formdata": "^0.7.2"
},
"peerDependencies": {
"@builder.io/qwik": "^1.4.0",
"@builder.io/qwik-city": "^1.4.0"
},
"devDependencies": {
"@builder.io/qwik": "^1.4.0",
"@builder.io/qwik-city": "^1.4.0",
Expand All @@ -61,9 +68,5 @@
"valibot": "^0.20.1",
"vite": "^4.5.2",
"zod": "^3.22.4"
},
"peerDependencies": {
"@builder.io/qwik": "^1.4.0",
"@builder.io/qwik-city": "^1.4.0"
}
}
23 changes: 14 additions & 9 deletions packages/qwik/src/actions/formAction$.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import { $, type QRL, implicit$FirstArg } from '@builder.io/qwik';
import { $, implicit$FirstArg, noSerialize, type QRL } from '@builder.io/qwik';
import {
type RequestEventAction,
globalActionQrl,
type Action,
type RequestEventAction,
} from '@builder.io/qwik-city';
import { AbortMessage } from '@builder.io/qwik-city/middleware/request-handler';
import { isDev } from '@builder.io/qwik/build';
import { decode } from 'decode-formdata';
import { FormError } from '../exceptions';
import type {
FieldValues,
ResponseData,
FormActionStore,
FormDataInfo,
FormErrors,
FormResponse,
Maybe,
FormErrors,
MaybePromise,
ValidateForm,
FormDataInfo,
FormActionStore,
PartialValues,
ResponseData,
ValidateForm,
} from '../types';
import { getFormDataValues } from '../utils';

/**
* Value type of the form action result.
Expand Down Expand Up @@ -84,7 +84,12 @@ export function formActionQrl<
const values: PartialValues<TFieldValues> =
type === 'application/x-www-form-urlencoded' ||
type === 'multipart/form-data'
? getFormDataValues(await event.request.formData(), formDataInfo)
? decode(
event.sharedMap.get('@actionFormData'),
formDataInfo,
({ output }) =>
output instanceof Blob ? noSerialize(output) : output
)
: (jsonData as PartialValues<TFieldValues>);

// Validate values and get errors if necessary
Expand Down
2 changes: 1 addition & 1 deletion packages/qwik/src/types/path.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ type TypeTemplatePath<
> = Value extends Type
? Value extends Array<any> | Record<string, any>
? `${Key}` | `${Key}.${TypeTemplatePaths<Value, Type>}`
: `${Key}`
: `${Key extends number ? '$' : Key}`
: Value extends FieldValues | (FieldValue | FieldValues)[]
? `${Key extends number ? '$' : Key}.${TypeTemplatePaths<Value, Type>}`
: never;
Expand Down
168 changes: 0 additions & 168 deletions packages/qwik/src/utils/getFormDataValues.ts

This file was deleted.

1 change: 0 additions & 1 deletion packages/qwik/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export * from './getFieldNames';
export * from './getFieldState';
export * from './getFieldStore';
export * from './getFilteredNames';
export * from './getFormDataValues';
export * from './getInitialFieldArrayStore';
export * from './getInitialFieldStore';
export * from './getInitialStores';
Expand Down
1 change: 1 addition & 0 deletions packages/qwik/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export default defineConfig(() => {
'@builder.io/qwik/jsx-runtime',
'@builder.io/qwik-city',
'@builder.io/qwik-city/middleware/request-handler',
'decode-formdata',
'valibot',
'zod',
],
Expand Down
12 changes: 10 additions & 2 deletions pnpm-lock.yaml

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

0 comments on commit b9c98a6

Please sign in to comment.