diff --git a/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/Create{{pascal_case entry_type.name}}.tsx.hbs b/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/Create{{pascal_case entry_type.name}}.tsx.hbs index b415cb755..263332d17 100644 --- a/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/Create{{pascal_case entry_type.name}}.tsx.hbs +++ b/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/Create{{pascal_case entry_type.name}}.tsx.hbs @@ -1,3 +1,4 @@ +import type { AppClient, Record, EntryHash, AgentPubKey, ActionHash, DnaHash } from '@holochain/client'; import { FC, useState, useContext, useEffect } from 'react'; import type { {{pascal_case entry_type.name}}{{#each entry_type.fields}}{{#if (eq field_type.type "Enum")}}, {{field_type.label}}{{/if}}{{/each}} } from './types'; import { HolochainContext } from '../../contexts/HolochainContext'; @@ -10,7 +11,7 @@ import { HolochainContext } from '../../contexts/HolochainContext'; {{/each}} {{/uniq_lines}} -const Create{{pascal_case entry_type.name}}: FC = ({ on{{pascal_case entry_type.name}}Created }) => { +const Create{{pascal_case entry_type.name}}: FC = ({ on{{pascal_case entry_type.name}}Created{{#each entry_type.fields}}{{#if (not widget) }}{{#if (eq cardinality "vector")}}, {{camel_case field_name}}{{else}}, {{camel_case field_name}}{{/if}}{{/if}}{{/each}} }) => { const {client} = useContext(HolochainContext); {{#each entry_type.fields}} {{#if widget }} @@ -45,7 +46,7 @@ const Create{{pascal_case entry_type.name}}: FC { setIs{{pascal_case entry_type.name}}Valid(true{{#each entry_type.fields}}{{#if widget}}{{#if (eq cardinality "single")}} && {{> (concat field_type.type "/" widget "/is-valid") variable_to_validate=(camel_case field_name) }}{{/if}}{{#if (eq cardinality "vector")}} && {{camel_case field_name}}.every(e => {{> (concat field_type.type "/" widget "/is-valid") variable_to_validate="e" }}){{/if}}{{/if}}{{/each}}); - }, [{{#each entry_type.fields}}{{#if widget}}{{camel_case field_name}}{{/if}}{{#unless @last}}, {{/unless}}{{/each}}]); + }, [{{#each entry_type.fields}}{{#if widget}}{{camel_case field_name}}{{#unless @last}}, {{/unless}}{{/if}}{{/each}}]); return (
@@ -71,7 +72,16 @@ const Create{{pascal_case entry_type.name}}: FC void + on{{pascal_case entry_type.name}}Created?: (hash?: Uint8Array) => void, +{{#each entry_type.fields}} + {{#if (not widget) }} + {{#if (eq cardinality "vector")}} + {{camel_case field_name}}: {{> (concat field_type.type "/type") }}[], + {{else}} + {{camel_case field_name}}{{#if (eq cardinality "single")}}{{/if}}: {{> (concat field_type.type "/type") }}{{#if (eq cardinality "option")}} | undefined{{/if}}, + {{/if}} + {{/if}} +{{/each}} } export default Create{{pascal_case entry_type.name}}; diff --git "a/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/{{#if crud.update}}Edit{{pascal_case entry_type.name}}.tsx{{\302\241if}}.hbs" "b/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/{{#if crud.update}}Edit{{pascal_case entry_type.name}}.tsx{{\302\241if}}.hbs" index 16e400688..7deb13d16 100644 --- "a/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/{{#if crud.update}}Edit{{pascal_case entry_type.name}}.tsx{{\302\241if}}.hbs" +++ "b/templates/react/entry-type/ui/src/{{dna_role_name}}/{{coordinator_zome_manifest.name}}/{{#if crud.update}}Edit{{pascal_case entry_type.name}}.tsx{{\302\241if}}.hbs" @@ -35,19 +35,20 @@ const Edit{{pascal_case entry_type.name}}: FC { - const {{camel_case entry_type.name}}: {{pascal_case entry_type.name}} = { + const {{camel_case entry_type.name}}: Partial<{{pascal_case entry_type.name}}> = { {{#each entry_type.fields}} {{#if widget}} {{#if (eq cardinality "single") }} - {{snake_case field_name}}: {{camel_case field_name}}!, + {{snake_case field_name}}: {{camel_case field_name}}, {{else}} {{snake_case field_name}}: {{camel_case field_name}}{{#if (eq cardinality "vector") }} as {{> (concat field_type.type "/type") }}[]{{/if}}, {{/if}} + {{else}} {{/if}} {{/each}} {{#each entry_type.fields}} {{#if (not widget)}} - {{snake_case field_name}}: current{{pascal_case ../entry_type.name}}!.{{snake_case field_name}}, + {{snake_case field_name}}: current{{pascal_case ../entry_type.name}}?.{{snake_case field_name}}, {{/if}} {{/each}} }; @@ -79,7 +80,7 @@ const Edit{{pascal_case entry_type.name}}: FC { setIs{{pascal_case entry_type.name}}Valid(true{{#each entry_type.fields}}{{#if widget}}{{#if (eq cardinality "single")}} && {{> (concat field_type.type "/" widget "/is-valid") variable_to_validate=(camel_case field_name) }}{{/if}}{{#if (eq cardinality "vector")}} && {{camel_case field_name}}.every(e => {{> (concat field_type.type "/" widget "/is-valid") variable_to_validate="e" }}){{/if}}{{/if}}{{/each}}); - }, [{{#each entry_type.fields}}{{#if widget}}{{camel_case field_name}}{{/if}}{{#unless @last}}, {{/unless}}{{/each}}]); + }, [{{#each entry_type.fields}}{{#if widget}}{{camel_case field_name}}{{#unless @last}}, {{/unless}}{{/if}}{{/each}}]); return (
diff --git a/templates/react/web-app/ui/.eslintrc.cjs.hbs b/templates/react/web-app/ui/.eslintrc.cjs.hbs deleted file mode 100644 index 241822cac..000000000 --- a/templates/react/web-app/ui/.eslintrc.cjs.hbs +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:react-hooks/recommended', - ], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - '@typescript-eslint/no-explicit-any': 'warn' - }, -} diff --git a/templates/react/web-app/ui/package.json.hbs b/templates/react/web-app/ui/package.json.hbs index 9b1846a0a..351c87ebb 100644 --- a/templates/react/web-app/ui/package.json.hbs +++ b/templates/react/web-app/ui/package.json.hbs @@ -1,17 +1,21 @@ { - "name": "my-app", - "private": true, + "name": "ui", "version": "0.1.0", - "type": "module", "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview", - "package": "npm run build && cd dist && bestzip ../dist.zip/*" + "start": "vite --clearScreen false --port $UI_PORT", + "build": "npm run check && vite build", +{{#if holo_enabled}} + "build:holo": "VITE_APP_IS_HOLO=true vite build", + "package:holo": "npm run build:holo && cd dist && bestzip ../dist.zip *", +{{/if}} + "check": "svelte-check --tsconfig ./tsconfig.json", + "package": "npm run build && cd dist && bestzip ../dist.zip *" }, "dependencies": { - "@holochain/client": "^0.18.0-dev.0", + "@holochain/client": "{{holochain_client_version}}", +{{#if holo_enabled}} + "@holo-host/web-sdk": "{{web_sdk_version}}", +{{/if}} "@msgpack/msgpack": "^2.8.0", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -19,14 +23,10 @@ "devDependencies": { "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", "@vitejs/plugin-react": "^4.2.1", "bestzip": "^2.2.1", - "eslint": "^8.57.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.6", "typescript": "^5.2.2", "vite": "^5.2.0" - } + }, + "type": "module" }