import { createForm } from '@felte/solid'; import { Component, createEffect, Match, Show, Switch } from 'solid-js'; import { TextField, Button } from '@kobalte/core'; import './style.css'; import { createServerAction$ } from 'solid-start/server'; import PouchDb from 'pouchdb'; import { v4 as uuid } from 'uuid'; import { put } from '~/lib/db'; import { useNavigate } from 'solid-start'; import { toHex } from '~/lib/to-hex'; import { cloneDeep } from 'lodash'; interface Props { values?: any; } const Invitation: Component = (props) => { const navigate = useNavigate(); const [saving, save] = createServerAction$(async (args: any) => { const { props, values } = args; console.log({ caller: 'Invitation / save', props, values, args, id: props.values?._id, }); const db = new PouchDb('.db'); const id = props.values?._id ?? `invitation/${uuid()}`; await put({ db, doc: { _id: id, date: new Date().toISOString(), type: 'invitation', ...values, }, }); return id; }); const [dbChecking, dbCheck] = createServerAction$(async (args: any) => { console.log({ caller: 'Invitation / dbCheck', args, }); let baseDbInfo; try { const baseDb = new PouchDb(cloneDeep(args)); baseDbInfo = await baseDb.info(); } catch (error) { baseDbInfo = error; } const name = `${args.name}/userdb-${toHex(args.auth.username)}`; let userDbInfo; try { const userDb = new PouchDb({ ...args, name }); userDbInfo = await userDb.info(); } catch (error) { userDbInfo = error; } return { baseDbInfo, userDbInfo, args, name }; }); const submitHandler = async (values: any, context: any) => { console.log({ caller: 'Invitation / submitHandler', props, values, context, }); const id = await save({ values, props }); if (!props.values) { navigate(`/invitations/${encodeURIComponent(id)}`); } }; const cancelHandler = () => { navigate(`/invitations/`); }; const deleteHandler = async () => { console.log({ caller: 'Invitation / deleteHandler', props, }); await save({ props, values: { _deleted: true } }); navigate(`/invitations/`); }; const { form, data } = createForm({ onSubmit: submitHandler, initialValues: props?.values, }); const dbCheckHandler = async () => { const result = await dbCheck({ name: data('database'), auth: { username: data('username'), password: data('password') }, }); console.log({ caller: 'Invitation / dbCheckHandler', props, data: data(), result, }); }; console.log({ caller: 'Invitation ', props, }); return (
Mail address Please provide a valid URL Database Please provide a valid URL User name Password Please provide a valid password Save Delete Create DB check Cancel
); }; export default Invitation;