Compare commits
	
		
			1 Commits
		
	
	
		
			a29a738a3d
			...
			test-andro
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3d8a2910cb | 
| @@ -1,11 +1,12 @@ | |||||||
| /.git | /.dioxus/ | ||||||
| /.github | /.git/ | ||||||
| /node_modules | /.github/ | ||||||
| /target | /debug/ | ||||||
|  | /node_modules/ | ||||||
|  | /static/ | ||||||
|  | /target/ | ||||||
| .dockerignore | .dockerignore | ||||||
| /docker-compose-dev.yaml | /docker-compose-dev.yml | ||||||
| /docker-compose-prod.yaml | /docker-compose-prod.yml | ||||||
| /docker-compose.yaml | /docker/dev/app/Dockerfile | ||||||
| /docker/dev/*/Dockerfile | /docker/prod/app/Dockerfile | ||||||
| /docker/prod/*/Dockerfile |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.env.dev
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.env.dev
									
									
									
									
									
								
							| @@ -1,2 +1,2 @@ | |||||||
| DATABASE_URL=postgres://app:app@db/todo_baggins | DATABASE_URL=postgres://app:app@localhost:5432/todo_baggins | ||||||
| LANGUAGE_CODE=en-US | LANGUAGE_CODE=en-US | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/workflows/checkov-check.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/checkov-check.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -22,7 +22,7 @@ jobs: | |||||||
|         with: |         with: | ||||||
|           python-version: "3.13.1" |           python-version: "3.13.1" | ||||||
|       - name: Rust toolchain installation |       - name: Rust toolchain installation | ||||||
|         uses: dtolnay/rust-toolchain@6691ebadcb18182cc1391d07c9f295f657c593cd |         uses: dtolnay/rust-toolchain@0579bb9e1907e560c2f263f705f93655a44a07e5 | ||||||
|       - name: code checkout |       - name: code checkout | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 |         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | ||||||
|         with: |         with: | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								.github/workflows/rust-check.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/rust-check.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -21,20 +21,18 @@ jobs: | |||||||
|         run: > |         run: > | ||||||
|           apt-get update && apt-get install -y |           apt-get update && apt-get install -y | ||||||
|           libgtk-3-dev=3.24.33-1ubuntu2.2 |           libgtk-3-dev=3.24.33-1ubuntu2.2 | ||||||
|           libjavascriptcoregtk-4.1-dev=2.48.3-0ubuntu0.22.04.1 |           libjavascriptcoregtk-4.1-dev=2.46.4-0ubuntu0.22.04.1 | ||||||
|           libsoup-3.0-dev=3.0.7-0ubuntu1 |           libsoup-3.0-dev=3.0.7-0ubuntu1 | ||||||
|           libwebkit2gtk-4.1-dev=2.48.3-0ubuntu0.22.04.1 |           libwebkit2gtk-4.1-dev=2.46.4-0ubuntu0.22.04.1 | ||||||
|           libxdo-dev=1:3.20160805.1-4 |           libxdo-dev=1:3.20160805.1-4 | ||||||
|       - name: Rust toolchain installation |       - name: Rust toolchain installation | ||||||
|         uses: dtolnay/rust-toolchain@6691ebadcb18182cc1391d07c9f295f657c593cd |         uses: dtolnay/rust-toolchain@0579bb9e1907e560c2f263f705f93655a44a07e5 | ||||||
|         with: |         with: | ||||||
|           components: clippy, rustfmt |           components: clippy, rustfmt | ||||||
|       - name: code checkout |       - name: code checkout | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 |         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
|       - name: .env symlink creation |  | ||||||
|         run: ln -s .env.example .env |  | ||||||
|       - name: npm build |       - name: npm build | ||||||
|         run: npm install && npm run build |         run: npm install && npm run build | ||||||
|       - name: rustfmt check |       - name: rustfmt check | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								.github/workflows/shellcheck-check.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/shellcheck-check.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -25,10 +25,4 @@ jobs: | |||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
|       - name: ShellCheck check |       - name: ShellCheck check | ||||||
|         # https://www.shellcheck.net/wiki/Recursiveness |         # https://www.shellcheck.net/wiki/Recursiveness | ||||||
|         run: | |         run: find . -type f -name "*.sh" -print0 | xargs -0 shellcheck | ||||||
|           if find . -type f -name "*.sh" -print0 | grep -qz .; then |  | ||||||
|             find . -type f -name "*.sh" -print0 | xargs -0 shellcheck |  | ||||||
|             exit 0 |  | ||||||
|           else |  | ||||||
|             echo "No shell scripts found. Skipping ShellCheck." |  | ||||||
|           fi |  | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +1,10 @@ | |||||||
| /node_modules | /target/ | ||||||
| /target | /dist/ | ||||||
|  | /static/ | ||||||
|  | /.dioxus/ | ||||||
|  | /node_modules/ | ||||||
|  |  | ||||||
| /**/*.rs.bk | **/*.rs.bk | ||||||
| /.DS_Store |  | ||||||
| /.env |  | ||||||
| /.env.prod |  | ||||||
|  |  | ||||||
| /docker-compose.yaml | .env | ||||||
|  | .env.prod | ||||||
|   | |||||||
							
								
								
									
										63
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										63
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,63 +0,0 @@ | |||||||
| <component name="ProjectCodeStyleConfiguration"> |  | ||||||
|   <code_scheme name="Project" version="173"> |  | ||||||
|     <HTMLCodeStyleSettings> |  | ||||||
|       <option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" /> |  | ||||||
|     </HTMLCodeStyleSettings> |  | ||||||
|     <JSCodeStyleSettings version="0"> |  | ||||||
|       <option name="FORCE_SEMICOLON_STYLE" value="true" /> |  | ||||||
|       <option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" /> |  | ||||||
|       <option name="FORCE_QUOTE_STYlE" value="true" /> |  | ||||||
|       <option name="ENFORCE_TRAILING_COMMA" value="Remove" /> |  | ||||||
|       <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" /> |  | ||||||
|       <option name="SPACES_WITHIN_IMPORTS" value="true" /> |  | ||||||
|     </JSCodeStyleSettings> |  | ||||||
|     <TypeScriptCodeStyleSettings version="0"> |  | ||||||
|       <option name="FORCE_SEMICOLON_STYLE" value="true" /> |  | ||||||
|       <option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" /> |  | ||||||
|       <option name="FORCE_QUOTE_STYlE" value="true" /> |  | ||||||
|       <option name="ENFORCE_TRAILING_COMMA" value="Remove" /> |  | ||||||
|       <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" /> |  | ||||||
|       <option name="SPACES_WITHIN_IMPORTS" value="true" /> |  | ||||||
|     </TypeScriptCodeStyleSettings> |  | ||||||
|     <VueCodeStyleSettings> |  | ||||||
|       <option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" /> |  | ||||||
|       <option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" /> |  | ||||||
|     </VueCodeStyleSettings> |  | ||||||
|     <codeStyleSettings language="HTML"> |  | ||||||
|       <option name="SOFT_MARGINS" value="80" /> |  | ||||||
|       <indentOptions> |  | ||||||
|         <option name="INDENT_SIZE" value="2" /> |  | ||||||
|         <option name="CONTINUATION_INDENT_SIZE" value="2" /> |  | ||||||
|         <option name="TAB_SIZE" value="2" /> |  | ||||||
|       </indentOptions> |  | ||||||
|     </codeStyleSettings> |  | ||||||
|     <codeStyleSettings language="JavaScript"> |  | ||||||
|       <option name="SOFT_MARGINS" value="80" /> |  | ||||||
|       <indentOptions> |  | ||||||
|         <option name="INDENT_SIZE" value="2" /> |  | ||||||
|         <option name="CONTINUATION_INDENT_SIZE" value="2" /> |  | ||||||
|         <option name="TAB_SIZE" value="2" /> |  | ||||||
|       </indentOptions> |  | ||||||
|     </codeStyleSettings> |  | ||||||
|     <codeStyleSettings language="Markdown"> |  | ||||||
|       <option name="RIGHT_MARGIN" value="80" /> |  | ||||||
|     </codeStyleSettings> |  | ||||||
|     <codeStyleSettings language="TypeScript"> |  | ||||||
|       <option name="SOFT_MARGINS" value="80" /> |  | ||||||
|       <indentOptions> |  | ||||||
|         <option name="INDENT_SIZE" value="2" /> |  | ||||||
|         <option name="CONTINUATION_INDENT_SIZE" value="2" /> |  | ||||||
|         <option name="TAB_SIZE" value="2" /> |  | ||||||
|       </indentOptions> |  | ||||||
|     </codeStyleSettings> |  | ||||||
|     <codeStyleSettings language="Vue"> |  | ||||||
|       <option name="SOFT_MARGINS" value="80" /> |  | ||||||
|       <indentOptions> |  | ||||||
|         <option name="CONTINUATION_INDENT_SIZE" value="2" /> |  | ||||||
|       </indentOptions> |  | ||||||
|     </codeStyleSettings> |  | ||||||
|     <codeStyleSettings language="yaml"> |  | ||||||
|       <option name="SOFT_MARGINS" value="80" /> |  | ||||||
|     </codeStyleSettings> |  | ||||||
|   </code_scheme> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										5
									
								
								.idea/codeStyles/codeStyleConfig.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								.idea/codeStyles/codeStyleConfig.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| <component name="ProjectCodeStyleConfiguration"> |  | ||||||
|   <state> |  | ||||||
|     <option name="USE_PER_PROJECT_SETTINGS" value="true" /> |  | ||||||
|   </state> |  | ||||||
| </component> |  | ||||||
							
								
								
									
										2
									
								
								.idea/dataSources.local.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/dataSources.local.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <project version="4"> | <project version="4"> | ||||||
|   <component name="dataSourceStorageLocal" created-in="RR-243.23654.116"> |   <component name="dataSourceStorageLocal" created-in="RR-243.22562.230"> | ||||||
|     <data-source name="todo_baggins@localhost" uuid="1658668c-c2b8-426d-a22f-16fbad9eff0b"> |     <data-source name="todo_baggins@localhost" uuid="1658668c-c2b8-426d-a22f-16fbad9eff0b"> | ||||||
|       <database-info product="PostgreSQL" version="16.4 (Debian 16.4-1.pgdg120+1)" jdbc-version="4.2" driver-name="PostgreSQL JDBC Driver" driver-version="42.6.0" dbms="POSTGRES" exact-version="16.4" exact-driver-version="42.6"> |       <database-info product="PostgreSQL" version="16.4 (Debian 16.4-1.pgdg120+1)" jdbc-version="4.2" driver-name="PostgreSQL JDBC Driver" driver-version="42.6.0" dbms="POSTGRES" exact-version="16.4" exact-driver-version="42.6"> | ||||||
|         <identifier-quote-string>"</identifier-quote-string> |         <identifier-quote-string>"</identifier-quote-string> | ||||||
|   | |||||||
							
								
								
									
										1048
									
								
								.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1048
									
								
								.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,2 +1,2 @@ | |||||||
| #n:public | #n:public | ||||||
| !<md> [946, 0, null, null, -2147483648, -2147483648] | !<md> [785, 0, null, null, -2147483648, -2147483648] | ||||||
|   | |||||||
							
								
								
									
										203
									
								
								.idea/icon.svg
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										203
									
								
								.idea/icon.svg
									
									
									
										generated
									
									
									
								
							| @@ -1,203 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> |  | ||||||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> |  | ||||||
|  |  | ||||||
| <svg |  | ||||||
|    width="512" |  | ||||||
|    height="512" |  | ||||||
|    viewBox="0 0 512 512" |  | ||||||
|    version="1.1" |  | ||||||
|    id="svg1" |  | ||||||
|    sodipodi:docname="icon.svg" |  | ||||||
|    inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" |  | ||||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |  | ||||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |  | ||||||
|    xmlns="http://www.w3.org/2000/svg" |  | ||||||
|    xmlns:svg="http://www.w3.org/2000/svg"> |  | ||||||
|   <sodipodi:namedview |  | ||||||
|      id="namedview1" |  | ||||||
|      pagecolor="#505050" |  | ||||||
|      bordercolor="#eeeeee" |  | ||||||
|      borderopacity="1" |  | ||||||
|      inkscape:showpageshadow="0" |  | ||||||
|      inkscape:pageopacity="0" |  | ||||||
|      inkscape:pagecheckerboard="0" |  | ||||||
|      inkscape:deskcolor="#505050" |  | ||||||
|      inkscape:document-units="px" |  | ||||||
|      inkscape:zoom="1.1020922" |  | ||||||
|      inkscape:cx="188.27826" |  | ||||||
|      inkscape:cy="204.15715" |  | ||||||
|      inkscape:window-width="1920" |  | ||||||
|      inkscape:window-height="1011" |  | ||||||
|      inkscape:window-x="0" |  | ||||||
|      inkscape:window-y="0" |  | ||||||
|      inkscape:window-maximized="1" |  | ||||||
|      inkscape:current-layer="layer1" /> |  | ||||||
|   <defs |  | ||||||
|      id="defs1"> |  | ||||||
|     <inkscape:path-effect |  | ||||||
|        effect="fillet_chamfer" |  | ||||||
|        id="path-effect2" |  | ||||||
|        is_visible="true" |  | ||||||
|        lpeversion="1" |  | ||||||
|        nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1" |  | ||||||
|        radius="0" |  | ||||||
|        unit="px" |  | ||||||
|        method="auto" |  | ||||||
|        mode="F" |  | ||||||
|        chamfer_steps="1" |  | ||||||
|        flexible="false" |  | ||||||
|        use_knot_distance="true" |  | ||||||
|        apply_no_radius="true" |  | ||||||
|        apply_with_radius="true" |  | ||||||
|        only_selected="false" |  | ||||||
|        hide_knots="false" /> |  | ||||||
|     <inkscape:path-effect |  | ||||||
|        effect="fillet_chamfer" |  | ||||||
|        id="path-effect1" |  | ||||||
|        is_visible="true" |  | ||||||
|        lpeversion="1" |  | ||||||
|        nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1" |  | ||||||
|        radius="0" |  | ||||||
|        unit="px" |  | ||||||
|        method="auto" |  | ||||||
|        mode="F" |  | ||||||
|        chamfer_steps="1" |  | ||||||
|        flexible="false" |  | ||||||
|        use_knot_distance="true" |  | ||||||
|        apply_no_radius="true" |  | ||||||
|        apply_with_radius="true" |  | ||||||
|        only_selected="false" |  | ||||||
|        hide_knots="false" /> |  | ||||||
|   </defs> |  | ||||||
|   <g |  | ||||||
|      inkscape:label="Layer 1" |  | ||||||
|      inkscape:groupmode="layer" |  | ||||||
|      id="layer1"> |  | ||||||
|     <rect |  | ||||||
|        style="display:inline;fill:#27272a;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|        id="rect1" |  | ||||||
|        width="512" |  | ||||||
|        height="512" |  | ||||||
|        x="0" |  | ||||||
|        y="0" |  | ||||||
|        sodipodi:insensitive="true" |  | ||||||
|        inkscape:label="background" |  | ||||||
|        ry="128.00018" |  | ||||||
|        sodipodi:type="rect" |  | ||||||
|        rx="129.98714" /> |  | ||||||
|     <g |  | ||||||
|        id="g17" |  | ||||||
|        inkscape:label="logo" |  | ||||||
|        transform="translate(8)"> |  | ||||||
|       <g |  | ||||||
|          id="g8" |  | ||||||
|          inkscape:label="ring"> |  | ||||||
|         <g |  | ||||||
|            id="g7" |  | ||||||
|            inkscape:label="back"> |  | ||||||
|           <circle |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:#d97706;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="path1" |  | ||||||
|              cx="224" |  | ||||||
|              cy="256" |  | ||||||
|              r="128" |  | ||||||
|              inkscape:label="ring back" /> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:none;stroke-width:21.8936;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect2" |  | ||||||
|              width="48" |  | ||||||
|              height="288" |  | ||||||
|              x="224" |  | ||||||
|              y="112" |  | ||||||
|              inkscape:label="rect2" /> |  | ||||||
|         </g> |  | ||||||
|         <g |  | ||||||
|            id="g1" |  | ||||||
|            transform="translate(-4.163147,-0.69235229)" |  | ||||||
|            inkscape:label="front"> |  | ||||||
|           <circle |  | ||||||
|              style="fill:#27272a;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="path1-5-2" |  | ||||||
|              cx="276.16315" |  | ||||||
|              cy="256.69235" |  | ||||||
|              r="128" /> |  | ||||||
|           <circle |  | ||||||
|              style="fill:none;fill-opacity:1;stroke:#fbbf24;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="path1-5" |  | ||||||
|              cx="276.16315" |  | ||||||
|              cy="256.69235" |  | ||||||
|              r="128" /> |  | ||||||
|         </g> |  | ||||||
|       </g> |  | ||||||
|       <g |  | ||||||
|          id="g16" |  | ||||||
|          inkscape:label="tick" |  | ||||||
|          transform="translate(16.000231,-8.3918418e-5)"> |  | ||||||
|         <g |  | ||||||
|            id="g6" |  | ||||||
|            transform="rotate(45,-57.96574,415.4208)" |  | ||||||
|            style="fill:#d97706;fill-opacity:1;stroke:none;stroke-opacity:1" |  | ||||||
|            inkscape:label="back"> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect9" |  | ||||||
|              width="32.000458" |  | ||||||
|              height="32" |  | ||||||
|              x="273.94067" |  | ||||||
|              y="210.74516" |  | ||||||
|              transform="rotate(-45,-57.96574,415.4208)" /> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect8" |  | ||||||
|              width="32.000458" |  | ||||||
|              height="32" |  | ||||||
|              x="206.05841" |  | ||||||
|              y="233.37257" |  | ||||||
|              transform="rotate(-45,-57.96574,415.4208)" /> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect7" |  | ||||||
|              height="16" |  | ||||||
|              x="228.686" |  | ||||||
|              y="285.255" |  | ||||||
|              width="32" |  | ||||||
|              transform="rotate(-45,-57.96574,415.4208)" /> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect5" |  | ||||||
|              width="64" |  | ||||||
|              height="32" |  | ||||||
|              x="0" |  | ||||||
|              y="100" /> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#d97706;fill-opacity:1;stroke:none;stroke-width:39.1918;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect6" |  | ||||||
|              width="32" |  | ||||||
|              height="96" |  | ||||||
|              x="32" |  | ||||||
|              y="36" /> |  | ||||||
|         </g> |  | ||||||
|         <g |  | ||||||
|            id="g4" |  | ||||||
|            transform="rotate(45,-41.965512,454.04877)" |  | ||||||
|            style="fill:#fbbf24;fill-opacity:1;stroke:none;stroke-opacity:1" |  | ||||||
|            inkscape:label="front"> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#fbbf24;fill-opacity:1;stroke:none;stroke-width:32;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect3" |  | ||||||
|              width="64" |  | ||||||
|              height="32" |  | ||||||
|              x="0" |  | ||||||
|              y="100" /> |  | ||||||
|           <rect |  | ||||||
|              style="fill:#fbbf24;fill-opacity:1;stroke:none;stroke-width:39.1918;stroke-dasharray:none;stroke-opacity:1" |  | ||||||
|              id="rect4" |  | ||||||
|              width="32" |  | ||||||
|              height="96" |  | ||||||
|              x="32" |  | ||||||
|              y="36" /> |  | ||||||
|         </g> |  | ||||||
|       </g> |  | ||||||
|     </g> |  | ||||||
|   </g> |  | ||||||
| </svg> |  | ||||||
| Before Width: | Height: | Size: 6.4 KiB | 
							
								
								
									
										2
									
								
								.idea/sqldialects.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/sqldialects.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,8 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <project version="4"> | <project version="4"> | ||||||
|   <component name="SqlDialectMappings"> |   <component name="SqlDialectMappings"> | ||||||
|  |     <file url="file://$PROJECT_DIR$/migrations/00000000000000_diesel_initial_setup/down.sql" dialect="GenericSQL" /> | ||||||
|  |     <file url="file://$PROJECT_DIR$/migrations/00000000000000_diesel_initial_setup/up.sql" dialect="PostgreSQL" /> | ||||||
|     <file url="PROJECT" dialect="PostgreSQL" /> |     <file url="PROJECT" dialect="PostgreSQL" /> | ||||||
|   </component> |   </component> | ||||||
| </project> | </project> | ||||||
							
								
								
									
										634
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										634
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										41
									
								
								Cargo.toml
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								Cargo.toml
									
									
									
									
									
								
							| @@ -1,42 +1,43 @@ | |||||||
| [package] | [package] | ||||||
| name = "todo-baggins" | name = "todo-baggins" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
| authors = ["Matouš Volf <git@matousvolf.cz>"] | authors = ["Matouš Volf <66163112+matous-volf@users.noreply.github.com>"] | ||||||
| edition = "2021" | edition = "2021" | ||||||
|  |  | ||||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||||
|  |  | ||||||
| [dependencies] | [dependencies] | ||||||
| chrono = { version = "0.4.39", features = ["serde", "unstable-locales"] } | chrono = { version = "0.4.38", features = ["serde", "unstable-locales"] } | ||||||
| dioxus = { version = "0.6.3", features = ["fullstack", "router"] } | dioxus = { version = "0.6.0", features = ["fullstack", "router"] } | ||||||
| feruca = { version = "0.10.1" } | feruca = { version = "0.10.0" } | ||||||
| serde = { version = "1.0.217" } | serde = { version = "1.0.208" } | ||||||
| serde_json = { version = "1.0.138" } | serde_json = { version = "1.0.125" } | ||||||
| serde_with = { version = "3.12.0", features = ["chrono_0_4"] } | serde_with = { version = "3.9.0", features = ["chrono_0_4"] } | ||||||
| tracing = "0.1.41" | tracing = "0.1.40" | ||||||
| unic-langid-impl = { version = "0.9.5", features = ["serde"] } | unic-langid-impl = { version = "0.9.5", features = ["serde"] } | ||||||
| validator = { version = "0.19.0", features = ["derive"] } | validator = { version = "0.19.0", features = ["derive"] } | ||||||
|  |  | ||||||
| diesel = { version = "2.2.7", features = ["chrono", "postgres", "postgres_backend", "serde_json"], optional = true } | diesel = { version = "2.2.2", features = ["chrono", "postgres", "postgres_backend", "serde_json"], optional = true } | ||||||
| diesel_migrations = { version = "2.2.0", features = ["postgres"], optional = true } | diesel_migrations = { version = "2.2.0", features = ["postgres"], optional = true } | ||||||
| dotenvy = { version = "0.15.7", optional = true } | dotenvy = { version = "0.15.7", optional = true } | ||||||
| time = { version = "0.3.37", optional = true } | time = { version = "0.3.36", optional = true } | ||||||
|  |  | ||||||
| async-std = { version = "1.13.0", optional = true } | async-std = { version = "1.12.0" } | ||||||
| dioxus-i18n = { version = "0.4.2", optional = true } | dioxus-i18n = { version = "0.3.0" } | ||||||
| dioxus-query = { version = "0.6.0", optional = true } | dioxus-query = { version = "0.6.0" } | ||||||
| voca_rs = { version = "1.15.2", optional = true } | voca_rs = { version = "1.15.2" } | ||||||
|  |  | ||||||
|  | [target.'cfg(target_os = "android")'.dependencies] | ||||||
|  | openssl = { version = "0.10", features = ["vendored"] } | ||||||
|  |  | ||||||
| [features] | [features] | ||||||
| default = ["web"] | default = ["mobile"] | ||||||
| desktop = ["dioxus/desktop"] | desktop = ["dioxus/desktop"] | ||||||
| mobile = ["dioxus/mobile"] | mobile = [ | ||||||
|  |     "dioxus/mobile", | ||||||
|  | ] | ||||||
| web = [ | web = [ | ||||||
|     "dioxus/web", |     "dioxus/web", | ||||||
|     "dep:async-std", |  | ||||||
|     "dep:dioxus-query", |  | ||||||
|     "dep:dioxus-i18n", |  | ||||||
|     "dep:voca_rs" |  | ||||||
| ] | ] | ||||||
| server = [ | server = [ | ||||||
|     "dioxus/server", |     "dioxus/server", | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								Dioxus.toml
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								Dioxus.toml
									
									
									
									
									
								
							| @@ -3,7 +3,14 @@ | |||||||
| # App (Project) Name | # App (Project) Name | ||||||
| name = "todo-baggins" | name = "todo-baggins" | ||||||
|  |  | ||||||
| # For font files to get referenced in CSS files by their original names, without the hash Dioxus appends. | # Dioxus App Default Platform | ||||||
|  | # web, desktop, fullstack | ||||||
|  | default_platform = "fullstack" | ||||||
|  |  | ||||||
|  | # `build` & `serve` dist path | ||||||
|  | out_dir = "dist" | ||||||
|  |  | ||||||
|  | # resource (assets) file folder | ||||||
| asset_dir = "assets" | asset_dir = "assets" | ||||||
|  |  | ||||||
| [web.app] | [web.app] | ||||||
| @@ -11,14 +18,22 @@ asset_dir = "assets" | |||||||
| # HTML title tag content | # HTML title tag content | ||||||
| title = "Todo Baggins" | title = "Todo Baggins" | ||||||
|  |  | ||||||
|  | [web.watcher] | ||||||
|  |  | ||||||
|  | # when watcher trigger, regenerate the `index.html` | ||||||
|  | reload_html = true | ||||||
|  |  | ||||||
|  | # which files or dirs will be watcher monitoring | ||||||
|  | watch_path = ["src", "assets"] | ||||||
|  |  | ||||||
| # include `assets` in web platform | # include `assets` in web platform | ||||||
| [web.resource] | [web.resource] | ||||||
|  |  | ||||||
| # Additional CSS style files | # CSS style file | ||||||
| style = [] | style = [] | ||||||
|  |  | ||||||
| # Additional JavaScript files | # Javascript code file | ||||||
| script = [] | script = ["https://kit.fontawesome.com/3c1b409f8f.js"] | ||||||
|  |  | ||||||
| [web.resource.dev] | [web.resource.dev] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,22 +12,11 @@ services: | |||||||
|       - ./Cargo.toml:/srv/app/Cargo.toml |       - ./Cargo.toml:/srv/app/Cargo.toml | ||||||
|       - ./diesel.toml:/srv/app/diesel.toml |       - ./diesel.toml:/srv/app/diesel.toml | ||||||
|       - ./Dioxus.toml:/srv/app/Dioxus.toml |       - ./Dioxus.toml:/srv/app/Dioxus.toml | ||||||
|     restart: always |  | ||||||
|     ports: ["8000:8000"] |  | ||||||
|     depends_on: ["db", "style-builder"] |  | ||||||
|  |  | ||||||
|   style-builder: |  | ||||||
|     build: |  | ||||||
|       dockerfile: docker/dev/style-builder/Dockerfile |  | ||||||
|     volumes: |  | ||||||
|       - ./assets:/srv/app/assets |  | ||||||
|       - ./src:/srv/app/src |  | ||||||
|       - ./package.json:/srv/app/package.json |       - ./package.json:/srv/app/package.json | ||||||
|       - ./package-lock.json:/srv/app/package-lock.json |       - ./package-lock.json:/srv/app/package-lock.json | ||||||
|     # To prevent the container from exiting. |  | ||||||
|     # See https://github.com/rails/rails/issues/44048. |  | ||||||
|     tty: true |  | ||||||
|     restart: always |     restart: always | ||||||
|  |     ports: ["8000:8000"] | ||||||
|  |     depends_on: ["db"] | ||||||
|  |  | ||||||
|   db: |   db: | ||||||
|     image: postgres:16.4-bookworm |     image: postgres:16.4-bookworm | ||||||
|   | |||||||
| @@ -1,17 +1,27 @@ | |||||||
| # 1.83.0-bookworm |  | ||||||
| FROM rust@sha256:a45bf1f5d9af0a23b26703b3500d70af1abff7f984a7abef5a104b42c02a292b | FROM rust@sha256:a45bf1f5d9af0a23b26703b3500d70af1abff7f984a7abef5a104b42c02a292b | ||||||
|  |  | ||||||
| RUN cargo install dioxus-cli --version 0.6.3 \ | RUN cargo install dioxus-cli diesel_cli \ | ||||||
|  && cargo install diesel_cli --version 2.2.7 |  && apt-get update && apt-get install -y --no-install-recommends \ | ||||||
|  |     nodejs=18.19.0+dfsg-6~deb12u2 \ | ||||||
|  |     npm=9.2.0~ds1-1 \ | ||||||
|  |     supervisor=4.2.5-1 \ | ||||||
|  |  && apt-get clean \ | ||||||
|  |  && rm -rf /var/lib/apt/lists/* | ||||||
|  |  | ||||||
| COPY . /srv/app | COPY . /srv/app | ||||||
| WORKDIR /srv/app | WORKDIR /srv/app | ||||||
|  |  | ||||||
| RUN mkdir -p /.local/share/dioxus \ | RUN npm install | ||||||
|  && chown -R 1000:1000 /srv/app /usr/local/cargo /.local/share/dioxus |  | ||||||
|  | COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf | ||||||
|  |  | ||||||
|  | RUN chown -R 1000:1000 /srv/app \ | ||||||
|  |  && chown -R 1000:1000 /usr/local/cargo \ | ||||||
|  |  && mkdir -p /.local/share/dioxus \ | ||||||
|  |  && chown -R 1000:1000 /.local/share/dioxus | ||||||
|  |  | ||||||
| HEALTHCHECK CMD curl --fail -H "Accept: text/html" http://localhost:8000 || exit 1 | HEALTHCHECK CMD curl --fail -H "Accept: text/html" http://localhost:8000 || exit 1 | ||||||
|  |  | ||||||
| USER 1000:1000 | USER 1000:1000 | ||||||
|  |  | ||||||
| CMD ["dx", "serve", "--addr", "0.0.0.0", "--port", "8000"] | CMD ["sh", "docker/dev/app/entrypoint.sh"] | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								docker/dev/app/entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								docker/dev/app/entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | supervisord -c /etc/supervisor/conf.d/supervisord.conf | ||||||
							
								
								
									
										23
									
								
								docker/dev/app/supervisord.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								docker/dev/app/supervisord.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | [supervisord] | ||||||
|  | nodaemon=true | ||||||
|  | logfile=/dev/null | ||||||
|  | logfile_maxbytes=0 | ||||||
|  | pidfile=/dev/null | ||||||
|  |  | ||||||
|  | [program:npm] | ||||||
|  | command=npm run watch | ||||||
|  | directory=/srv/app | ||||||
|  | autostart=true | ||||||
|  | autorestart=true | ||||||
|  | stdout_logfile=/dev/fd/1 | ||||||
|  | stdout_logfile_maxbytes=0 | ||||||
|  | redirect_stderr=true | ||||||
|  |  | ||||||
|  | # [program:dx] | ||||||
|  | # command=dx serve --addr 0.0.0.0 --port 8000 | ||||||
|  | # directory=/srv/app | ||||||
|  | # autostart=true | ||||||
|  | # autorestart=true | ||||||
|  | # stdout_logfile=/dev/fd/1 | ||||||
|  | # stdout_logfile_maxbytes=0 | ||||||
|  | # redirect_stderr=true | ||||||
| @@ -1,15 +0,0 @@ | |||||||
| # 23-alpine3.21 |  | ||||||
| FROM node@sha256:c61b6b12a3c96373673cd52d7ecee2314e82bca5d541eecf0bc6aee870c8c6f7 |  | ||||||
|  |  | ||||||
| WORKDIR /srv/app |  | ||||||
|  |  | ||||||
| COPY ./package.json ./package.json |  | ||||||
| COPY ./package-lock.json ./package-lock.json |  | ||||||
|  |  | ||||||
| RUN npm install |  | ||||||
|  |  | ||||||
| USER 1000:1000 |  | ||||||
|  |  | ||||||
| #checkov:skip=CKV_DOCKER_2: No need for (or even a simple way to do) a healthcheck. |  | ||||||
|  |  | ||||||
| CMD ["npm", "run", "watch"] |  | ||||||
| @@ -1,26 +1,23 @@ | |||||||
| # 1.83.0-bookworm |  | ||||||
| FROM rust@sha256:a45bf1f5d9af0a23b26703b3500d70af1abff7f984a7abef5a104b42c02a292b AS builder | FROM rust@sha256:a45bf1f5d9af0a23b26703b3500d70af1abff7f984a7abef5a104b42c02a292b AS builder | ||||||
|  |  | ||||||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | RUN cargo install dioxus-cli diesel_cli \ | ||||||
|  |  && apt-get update && apt-get install -y --no-install-recommends \ | ||||||
|     nodejs=18.19.0+dfsg-6~deb12u2 \ |     nodejs=18.19.0+dfsg-6~deb12u2 \ | ||||||
|     npm=9.2.0~ds1-1 \ |     npm=9.2.0~ds1-1 \ | ||||||
|  && apt-get clean \ |  && apt-get clean \ | ||||||
|  && rm -rf /var/lib/apt/lists/* \ |  && rm -rf /var/lib/apt/lists/* | ||||||
|  && cargo install dioxus-cli --version 0.6.3 \ |  | ||||||
|  && cargo install diesel_cli --version 2.2.7 |  | ||||||
|  |  | ||||||
| COPY . /srv/app | COPY . /srv/app | ||||||
| WORKDIR /srv/app | WORKDIR /srv/app | ||||||
|  |  | ||||||
| RUN npm install \ | RUN npm install \ | ||||||
|  && npm run build \ |  && npm run build \ | ||||||
|  && dx bundle |  && dx build --release | ||||||
|  |  | ||||||
| # bookworm |  | ||||||
| FROM debian@sha256:b877a1a3fdf02469440f1768cf69c9771338a875b7add5e80c45b756c92ac20a AS runner | FROM debian@sha256:b877a1a3fdf02469440f1768cf69c9771338a875b7add5e80c45b756c92ac20a AS runner | ||||||
|  |  | ||||||
| RUN apt-get update \ | RUN apt-get update \ | ||||||
|  && apt-get install -y --no-install-recommends libpq5=15.10-0+deb12u1 \ |  && apt-get install -y --no-install-recommends libpq5=15.8-0+deb12u1 \ | ||||||
|  && apt-get clean \ |  && apt-get clean \ | ||||||
|  && rm -rf /var/lib/apt/lists/* |  && rm -rf /var/lib/apt/lists/* | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ const TAILWIND_CSS: Asset = asset!("/assets/styles/tailwind_output.css"); | |||||||
| const FONTS_CSS: Asset = asset!("/assets/styles/fonts.css"); | const FONTS_CSS: Asset = asset!("/assets/styles/fonts.css"); | ||||||
| const INPUT_NUMBER_ARROWS_CSS: Asset = asset!("/assets/styles/input_number_arrows.css"); | const INPUT_NUMBER_ARROWS_CSS: Asset = asset!("/assets/styles/input_number_arrows.css"); | ||||||
| const INPUT_RANGE_CSS: Asset = asset!("/assets/styles/input_range.css"); | const INPUT_RANGE_CSS: Asset = asset!("/assets/styles/input_range.css"); | ||||||
| const MANIFEST: Asset = asset!("/assets/manifest.json"); |  | ||||||
|  |  | ||||||
| #[component] | #[component] | ||||||
| pub(crate) fn App() -> Element { | pub(crate) fn App() -> Element { | ||||||
| @@ -36,12 +35,10 @@ pub(crate) fn App() -> Element { | |||||||
|  |  | ||||||
|     rsx! { |     rsx! { | ||||||
|         document::Link { rel: "icon", href: FAVICON } |         document::Link { rel: "icon", href: FAVICON } | ||||||
|         document::Stylesheet { href: TAILWIND_CSS } |         document::Link { rel: "stylesheet", href: TAILWIND_CSS } | ||||||
|         document::Stylesheet { href: FONTS_CSS } |         document::Link { rel: "stylesheet", href: FONTS_CSS } | ||||||
|         document::Stylesheet { href: INPUT_NUMBER_ARROWS_CSS } |         document::Link { rel: "stylesheet", href: INPUT_NUMBER_ARROWS_CSS } | ||||||
|         document::Stylesheet { href: INPUT_RANGE_CSS } |         document::Link { rel: "stylesheet", href: INPUT_RANGE_CSS } | ||||||
|         document::Link { rel: "manifest", href: MANIFEST } |  | ||||||
|         document::Script { src: "https://kit.fontawesome.com/3c1b409f8f.js" } |  | ||||||
|  |  | ||||||
|         div { |         div { | ||||||
|             class: "min-h-screen text-zinc-200 bg-zinc-800 pt-4 pb-36", |             class: "min-h-screen text-zinc-200 bg-zinc-800 pt-4 pb-36", | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ pub(crate) fn TaskListItem(task: TaskWithSubtasks) -> Element { | |||||||
|         div { |         div { | ||||||
|             class: "flex flex-col", |             class: "flex flex-col", | ||||||
|             div { |             div { | ||||||
|                 class: "mt-1 grow font-medium", |                 class: "mt-2 grow font-medium", | ||||||
|                 {task.task().title()} |                 {task.task().title()} | ||||||
|             }, |             }, | ||||||
|             div { |             div { | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ impl From<diesel::result::Error> for ProjectError { | |||||||
| // Has to be implemented for Dioxus server functions. | // Has to be implemented for Dioxus server functions. | ||||||
| impl Display for ProjectError { | impl Display for ProjectError { | ||||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|         write!(f, "{self:?}") |         write!(f, "{:?}", self) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ impl From<ErrorVec<Error>> for ErrorVec<SubtaskError> { | |||||||
| // Has to be implemented for Dioxus server functions. | // Has to be implemented for Dioxus server functions. | ||||||
| impl Display for SubtaskError { | impl Display for SubtaskError { | ||||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|         write!(f, "{self:?}") |         write!(f, "{:?}", self) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -55,7 +55,7 @@ impl From<diesel::result::Error> for TaskError { | |||||||
| // Has to be implemented for Dioxus server functions. | // Has to be implemented for Dioxus server functions. | ||||||
| impl Display for TaskError { | impl Display for TaskError { | ||||||
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||||||
|         write!(f, "{self:?}") |         write!(f, "{:?}", self) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,10 +12,10 @@ async fn fetch_projects(keys: Vec<QueryKey>) -> QueryResult<QueryValue, QueryErr | |||||||
|         match get_projects().await { |         match get_projects().await { | ||||||
|             Ok(projects) => Ok(QueryValue::Projects(projects)), |             Ok(projects) => Ok(QueryValue::Projects(projects)), | ||||||
|             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), |             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), | ||||||
|             Err(error) => panic!("Unexpected error: {error:?}"), |             Err(error) => panic!("Unexpected error: {:?}", error), | ||||||
|         } |         } | ||||||
|         .into() |         .into() | ||||||
|     } else { |     } else { | ||||||
|         panic!("Unexpected query keys: {keys:?}"); |         panic!("Unexpected query keys: {:?}", keys); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -17,10 +17,10 @@ async fn fetch_subtasks_of_task(keys: Vec<QueryKey>) -> QueryResult<QueryValue, | |||||||
|         match get_subtasks_of_task(*task_id).await { |         match get_subtasks_of_task(*task_id).await { | ||||||
|             Ok(subtasks) => Ok(QueryValue::Subtasks(subtasks)), |             Ok(subtasks) => Ok(QueryValue::Subtasks(subtasks)), | ||||||
|             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), |             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), | ||||||
|             Err(error) => panic!("Unexpected error: {error:?}"), |             Err(error) => panic!("Unexpected error: {:?}", error), | ||||||
|         } |         } | ||||||
|         .into() |         .into() | ||||||
|     } else { |     } else { | ||||||
|         panic!("Unexpected query keys: {keys:?}"); |         panic!("Unexpected query keys: {:?}", keys); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,11 +19,11 @@ async fn fetch_tasks_in_category(keys: Vec<QueryKey>) -> QueryResult<QueryValue, | |||||||
|         match get_tasks_in_category(category.clone()).await { |         match get_tasks_in_category(category.clone()).await { | ||||||
|             Ok(tasks) => Ok(QueryValue::Tasks(tasks)), |             Ok(tasks) => Ok(QueryValue::Tasks(tasks)), | ||||||
|             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), |             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), | ||||||
|             Err(error) => panic!("Unexpected error: {error:?}"), |             Err(error) => panic!("Unexpected error: {:?}", error), | ||||||
|         } |         } | ||||||
|         .into() |         .into() | ||||||
|     } else { |     } else { | ||||||
|         panic!("Unexpected query keys: {keys:?}"); |         panic!("Unexpected query keys: {:?}", keys); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -47,10 +47,10 @@ async fn fetch_tasks_with_subtasks_in_category( | |||||||
|         match get_tasks_with_subtasks_in_category(category.clone()).await { |         match get_tasks_with_subtasks_in_category(category.clone()).await { | ||||||
|             Ok(tasks) => Ok(QueryValue::TasksWithSubtasks(tasks)), |             Ok(tasks) => Ok(QueryValue::TasksWithSubtasks(tasks)), | ||||||
|             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), |             Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), | ||||||
|             Err(error) => panic!("Unexpected error: {error:?}"), |             Err(error) => panic!("Unexpected error: {:?}", error), | ||||||
|         } |         } | ||||||
|         .into() |         .into() | ||||||
|     } else { |     } else { | ||||||
|         panic!("Unexpected query keys: {keys:?}"); |         panic!("Unexpected query keys: {:?}", keys); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ use diesel::prelude::*; | |||||||
| use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, SelectableHelper}; | use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, SelectableHelper}; | ||||||
| use dioxus::prelude::*; | use dioxus::prelude::*; | ||||||
| #[cfg(feature = "server")] | #[cfg(feature = "server")] | ||||||
| use time::Month; | use time::util::days_in_year_month; | ||||||
| #[cfg(feature = "server")] | #[cfg(feature = "server")] | ||||||
| use validator::Validate; | use validator::Validate; | ||||||
|  |  | ||||||
| @@ -178,11 +178,10 @@ pub(crate) async fn complete_task(task_id: i32) -> Result<Task, ServerFnError<Er | |||||||
|                 *date = NaiveDate::from_ymd_opt( |                 *date = NaiveDate::from_ymd_opt( | ||||||
|                     date.year(), |                     date.year(), | ||||||
|                     date.month(), |                     date.month(), | ||||||
|                     reoccurrence.start_date().day().min( |                     reoccurrence.start_date().day().min(days_in_year_month( | ||||||
|                         Month::try_from(date.month() as u8) |                         date.year(), | ||||||
|                             .unwrap() |                         (date.month() as u8).try_into().unwrap(), | ||||||
|                             .length(date.year()) as u32, |                     ) as u32), | ||||||
|                     ), |  | ||||||
|                 ) |                 ) | ||||||
|                 .unwrap() |                 .unwrap() | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| /** @type {import("tailwindcss").Config} */ | /** @type {import('tailwindcss').Config} */ | ||||||
| module.exports = { | module.exports = { | ||||||
|   mode: "all", |   mode: "all", | ||||||
|   content: ["./src/**/*.{rs,html,css}"], |   content: ["./src/**/*.{rs,html,css}", "./dist/**/*.html"], | ||||||
|   theme: { |   theme: { | ||||||
|     fontFamily: { |     fontFamily: { | ||||||
|       sans: ["Inter", "sans-serif"], |       sans: ["Inter", "sans-serif"], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user