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 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
- export declare const getAuthContext: () => unknown;
1
+ import { type AuthSig } from "./AuthSig.js";
2
+ export declare const getAuthContext: () => AuthSig;
@@ -1,3 +1,4 @@
1
1
  import { getContext } from "svelte";
2
2
  import { AUTH_CONTEXT_NAME } from '../constants.js';
3
+ import {} from "./AuthSig.js";
3
4
  export const getAuthContext = () => getContext(AUTH_CONTEXT_NAME);
@@ -1,52 +1,9 @@
1
1
  <script lang="ts">
2
- import { getFirestore, collection, doc, getDoc, updateDoc, setDoc, addDoc, deleteField } from "firebase/firestore"
2
+ import { handleForm } from "../utilities/handleForm.js";
3
3
 
4
4
  let { collectionName, docId = null, docIdField = null, onSubmit, children, beforeSubmit = null, ...rest } = $props()
5
- const db = getFirestore()
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,7 @@
1
+ export declare const handleForm: ({ collectionName, docId, docIdField, onSubmit, beforeSubmit }: {
2
+ collectionName: string;
3
+ docId: null | string;
4
+ docIdField: null | string;
5
+ onSubmit: any;
6
+ beforeSubmit: any;
7
+ }) => (ev: SubmitEvent) => Promise<void>;
@@ -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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sveltedfire",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build && npm run prepack",