sveltedfire 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/sveltedfire/auth/getAuthContext.d.ts +2 -1
- package/dist/sveltedfire/auth/getAuthContext.js +1 -0
- package/dist/sveltedfire/components/FireForm.svelte +3 -46
- package/dist/sveltedfire/components/SveltedAuth.svelte +1 -1
- package/dist/sveltedfire/utilities/handleForm.d.ts +7 -0
- package/dist/sveltedfire/utilities/handleForm.js +48 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { kindlyFetchDoc } from './sveltedfire/utilities/kindlyFetchDoc.js';
|
|
|
9
9
|
export { kindlyFetchDocs } from './sveltedfire/utilities/kindlyFetchDocs.js';
|
|
10
10
|
export { type AuthSig } from './sveltedfire/auth/AuthSig.js';
|
|
11
11
|
export { getAuthContext } from './sveltedfire/auth/getAuthContext.js';
|
|
12
|
+
export { handleForm } from './sveltedfire/utilities/handleForm.js';
|
|
12
13
|
import SignedIn from './sveltedfire/components/SignedIn.svelte';
|
|
13
14
|
import SignedOut from './sveltedfire/components/SignedOut.svelte';
|
|
14
15
|
import SveltedAuth from "./sveltedfire/components/SveltedAuth.svelte";
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export { kindlyFetchDoc } from './sveltedfire/utilities/kindlyFetchDoc.js';
|
|
|
10
10
|
export { kindlyFetchDocs } from './sveltedfire/utilities/kindlyFetchDocs.js';
|
|
11
11
|
export {} from './sveltedfire/auth/AuthSig.js';
|
|
12
12
|
export { getAuthContext } from './sveltedfire/auth/getAuthContext.js';
|
|
13
|
+
export { handleForm } from './sveltedfire/utilities/handleForm.js';
|
|
13
14
|
import SignedIn from './sveltedfire/components/SignedIn.svelte';
|
|
14
15
|
import SignedOut from './sveltedfire/components/SignedOut.svelte';
|
|
15
16
|
import SveltedAuth from "./sveltedfire/components/SveltedAuth.svelte";
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { type AuthSig } from "./AuthSig.js";
|
|
2
|
+
export declare const getAuthContext: () => AuthSig;
|
|
@@ -1,52 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
2
|
+
import { handleForm } from "../utilities/handleForm.js";
|
|
3
3
|
|
|
4
4
|
let { collectionName, docId = null, docIdField = null, onSubmit, children, beforeSubmit = null, ...rest } = $props()
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const submitTheForm = async (ev: SubmitEvent) => {
|
|
8
|
-
console.log('Attempting to save')
|
|
9
|
-
ev.preventDefault()
|
|
10
|
-
const formData = new FormData(ev.target as HTMLFormElement)
|
|
11
|
-
let col = collection(db, collectionName)
|
|
12
|
-
let objData = Object.fromEntries(formData.entries())
|
|
13
|
-
if (beforeSubmit) {
|
|
14
|
-
objData = beforeSubmit(objData, ev)
|
|
15
|
-
}
|
|
16
|
-
Object.keys(objData).forEach(k => {
|
|
17
|
-
if (objData[k] === '_deleteme_') {
|
|
18
|
-
if (!k.match(/\[/)) {
|
|
19
|
-
objData[k] = deleteField()
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
let matcher = k.match(/^(.*)\[(.*)\]$/)
|
|
23
|
-
if (matcher) {
|
|
24
|
-
if (!(matcher[1] in objData)) {
|
|
25
|
-
objData[matcher[1]] = []
|
|
26
|
-
}
|
|
27
|
-
if (objData[k] === '_deleteme_') {
|
|
28
|
-
console.log('Deletion override')
|
|
29
|
-
objData[matcher[1]] = deleteField()
|
|
30
|
-
} else {
|
|
31
|
-
objData[matcher[1]][parseInt(matcher[2], 10)] = objData[k]
|
|
32
|
-
}
|
|
33
|
-
delete objData[k]
|
|
34
|
-
}
|
|
35
|
-
})
|
|
36
|
-
console.log('Object data is', objData)
|
|
37
|
-
let docRefId
|
|
38
|
-
if (docId) {
|
|
39
|
-
await updateDoc(doc(col, docId), objData)
|
|
40
|
-
docRefId = docId
|
|
41
|
-
} else if (docIdField) {
|
|
42
|
-
await updateDoc(doc(col, formData.get(docIdField) as string), objData)
|
|
43
|
-
docRefId = formData.get(docIdField) as string
|
|
44
|
-
} else {
|
|
45
|
-
let docRef = await addDoc(col, objData)
|
|
46
|
-
docRefId = docRef.id
|
|
47
|
-
}
|
|
48
|
-
onSubmit(docRefId)
|
|
49
|
-
}
|
|
5
|
+
|
|
6
|
+
const submitTheForm = handleForm({ collectionName, docId, docIdField, onSubmit, beforeSubmit })
|
|
50
7
|
</script>
|
|
51
8
|
|
|
52
9
|
<form onsubmit={submitTheForm} {...rest}>
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
let additionalKeys: {[k: string]: any} = {}
|
|
12
12
|
Object.keys(rest).forEach(k => {
|
|
13
13
|
if (k.startsWith('extra_')) {
|
|
14
|
-
const actualKey = k.replace('^extra_', '')
|
|
14
|
+
const actualKey = k.replace(new RegExp('^extra_'), '')
|
|
15
15
|
additionalKeys[actualKey] = k
|
|
16
16
|
}
|
|
17
17
|
})
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getFirestore, collection, doc, getDoc, updateDoc, setDoc, addDoc, deleteField } from "firebase/firestore";
|
|
2
|
+
export const handleForm = ({ collectionName, docId = null, docIdField = null, onSubmit, beforeSubmit = null }) => async (ev) => {
|
|
3
|
+
const db = getFirestore();
|
|
4
|
+
console.log('Attempting to save');
|
|
5
|
+
ev.preventDefault();
|
|
6
|
+
const formData = new FormData(ev.target);
|
|
7
|
+
let col = collection(db, collectionName);
|
|
8
|
+
let objData = Object.fromEntries(formData.entries());
|
|
9
|
+
if (beforeSubmit) {
|
|
10
|
+
objData = beforeSubmit(objData, ev);
|
|
11
|
+
}
|
|
12
|
+
Object.keys(objData).forEach(k => {
|
|
13
|
+
if (objData[k] === '_deleteme_') {
|
|
14
|
+
if (!k.match(/\[/)) {
|
|
15
|
+
objData[k] = deleteField();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
let matcher = k.match(/^(.*)\[(.*)\]$/);
|
|
19
|
+
if (matcher) {
|
|
20
|
+
if (!(matcher[1] in objData)) {
|
|
21
|
+
objData[matcher[1]] = [];
|
|
22
|
+
}
|
|
23
|
+
if (objData[k] === '_deleteme_') {
|
|
24
|
+
console.log('Deletion override');
|
|
25
|
+
objData[matcher[1]] = deleteField();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
objData[matcher[1]][parseInt(matcher[2], 10)] = objData[k];
|
|
29
|
+
}
|
|
30
|
+
delete objData[k];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
console.log('Object data is', objData);
|
|
34
|
+
let docRefId;
|
|
35
|
+
if (docId) {
|
|
36
|
+
await updateDoc(doc(col, docId), objData);
|
|
37
|
+
docRefId = docId;
|
|
38
|
+
}
|
|
39
|
+
else if (docIdField) {
|
|
40
|
+
await updateDoc(doc(col, formData.get(docIdField)), objData);
|
|
41
|
+
docRefId = formData.get(docIdField);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
let docRef = await addDoc(col, objData);
|
|
45
|
+
docRefId = docRef.id;
|
|
46
|
+
}
|
|
47
|
+
onSubmit(docRefId);
|
|
48
|
+
};
|