UNPKG

@jigx/mdk

Version:

Jigx Mobile Development Kit - SDK for building Jigx applications

548 lines 17.7 kB
{ "name": "test-rcjy", "title": "Expense Tracker", "category": "personal", "databases": { "default": { "databaseId": "default", "tables": { "expenses": null } } }, "datasources": { "data-expenses": { "type": "datasource.sqlite", "datasourceId": "data-expenses", "instanceId": "data-expenses", "options": { "provider": "DATA_PROVIDER_DYNAMIC", "query": "\n SELECT \n exp.id, -- Always include row id\n -- Option 1: Return entire JSON doc (preferred)\n exp.data\n -- Option 2: Extract specific fields for expressions\n -- json_extract(exp.data, '$.title') AS title\n FROM [default/expenses] AS exp\n ORDER BY\n -- Always extract for joins, sorting, etc\n json_extract(exp.data, '$.date') DESC\n ", "entities": [ "default/expenses" ], "jsonProperties": [ "data" ] } }, "expense-categories": { "type": "datasource.static", "datasourceId": "expense-categories", "instanceId": "expense-categories", "options": { "data": [ { "id": "food", "name": "Food & Dining" }, { "id": "transport", "name": "Transportation" }, { "id": "accommodation", "name": "Accommodation" }, { "id": "office", "name": "Office Supplies" }, { "id": "technology", "name": "Technology" }, { "id": "entertainment", "name": "Entertainment" }, { "id": "health", "name": "Health & Medical" }, { "id": "education", "name": "Education & Training" }, { "id": "other", "name": "Other" } ] } }, "expense-stats": { "type": "datasource.sqlite", "datasourceId": "expense-stats", "instanceId": "expense-stats", "options": { "provider": "DATA_PROVIDER_DYNAMIC", "query": "\n SELECT \n COUNT(1) AS count,\n SUM(json_extract(exp.data, '$.amount')) AS total_amount,\n AVG(json_extract(exp.data, '$.amount')) AS avg_amount,\n MAX(json_extract(exp.data, '$.amount')) AS max_amount\n FROM [default/expenses] AS exp\n ", "entities": [ "default/expenses" ] } }, "recent-expenses": { "type": "datasource.sqlite", "datasourceId": "recent-expenses", "instanceId": "recent-expenses", "options": { "provider": "DATA_PROVIDER_DYNAMIC", "query": "\n SELECT \n exp.id,\n exp.data\n FROM [default/expenses] AS exp\n ORDER BY\n json_extract(exp.data, '$.date') DESC\n LIMIT 5\n ", "entities": [ "default/expenses" ], "jsonProperties": [ "data" ] } }, "expenses-summary": { "type": "datasource.sqlite", "datasourceId": "expenses-summary", "instanceId": "expenses-summary", "options": { "provider": "DATA_PROVIDER_DYNAMIC", "query": "\n SELECT \n json_extract(exp.data, '$.categoryId') AS categoryId,\n SUM(json_extract(exp.data, '$.amount')) AS total_amount,\n COUNT(1) AS count\n FROM [default/expenses] AS exp\n GROUP BY categoryId\n ORDER BY total_amount DESC\n ", "entities": [ "default/expenses" ], "isDocument": false } } }, "jigs": { "home": { "type": "jig.default", "jigId": "home", "title": "Expense Tracker", "actions": [ { "children": [ { "type": "action.go-to", "options": { "title": "Add Expense", "linkTo": "add-expense" } }, { "type": "action.go-to", "options": { "title": "View All", "linkTo": "expense-list" } } ], "numberOfVisibleActions": 2 } ], "inputs": {}, "children": [ { "type": "component.card", "options": { "children": [ { "type": "component.list", "options": { "isHorizontal": false, "isHorizontalScrollIndicatorHidden": true, "isVerticalScrollIndicatorHidden": true, "maximumItemsToRender": 10, "item": { "type": "component.list-item", "options": { "title": "=$formatCurrency(@ctx.current.item.total_amount) & \" (\" & @ctx.current.item.count & \" items)\"" } }, "data": "=@ctx.datasources.expense-stats" } } ] } }, { "type": "component.list", "options": { "isHorizontal": false, "isHorizontalScrollIndicatorHidden": true, "isVerticalScrollIndicatorHidden": true, "maximumItemsToRender": 10, "item": { "type": "component.list-item", "options": { "title": "=@ctx.current.item.data.title", "subtitle": "=@ctx.current.item.data.categoryId & \"\" & $formatDate(@ctx.current.item.data.date)", "description": "=$formatCurrency(@ctx.current.item.data.amount)", "onPress": { "type": "action.go-to", "options": { "linkTo": "edit-expense", "parameters": { "id": "=@ctx.current.item.id", "expenseItem": "=@ctx.current.item.data" } } } } }, "data": "=@ctx.datasources.recent-expenses" } } ] }, "expense-list": { "type": "jig.default", "jigId": "expense-list", "title": "All Expenses", "actions": [ { "children": [ { "type": "action.go-to", "options": { "title": "Add New", "linkTo": "add-expense" } } ], "numberOfVisibleActions": 1 } ], "inputs": {}, "children": [ { "type": "component.card", "options": { "children": [ { "type": "component.text-field", "options": { "label": "Summary by Category", "value": "Category Breakdown", "style": { "isDisabled": true } } }, { "type": "component.list", "options": { "isHorizontal": false, "isHorizontalScrollIndicatorHidden": true, "isVerticalScrollIndicatorHidden": true, "maximumItemsToRender": 10, "item": { "type": "component.list-item", "options": { "title": "=@ctx.current.item.categoryId", "subtitle": "=$formatCurrency(@ctx.current.item.total_amount) & \"\" & @ctx.current.item.count & \" expenses\"" } }, "data": "=@ctx.datasources.expenses-summary" } } ] } }, { "type": "component.list", "options": { "isHorizontal": false, "isHorizontalScrollIndicatorHidden": true, "isVerticalScrollIndicatorHidden": true, "maximumItemsToRender": 10, "item": { "type": "component.list-item", "options": { "title": "=@ctx.current.item.data.title", "subtitle": "=@ctx.current.item.data.categoryId & \"\" & @ctx.current.item.data.date", "description": "=$formatCurrency(@ctx.current.item.data.amount)", "onPress": { "type": "action.go-to", "options": { "linkTo": "edit-expense", "parameters": { "id": "=@ctx.current.item.id", "expenseItem": "=@ctx.current.item.data" } } } } }, "data": "=@ctx.datasources.data-expenses" } } ] }, "add-expense": { "type": "jig.default", "jigId": "add-expense", "title": "Add Expense", "actions": [ { "children": [ { "type": "action.execute-entity", "options": { "title": "Save Expense", "provider": "DATA_PROVIDER_DYNAMIC", "entity": "default/expenses", "method": "create", "data": { "title": "=@ctx.components.title.state.value", "amount": "=@ctx.components.amount.state.value", "categoryId": "=@ctx.components.categoryId.state.value", "date": "=@ctx.components.date.state.value", "description": "=@ctx.components.description.state.value", "timestamp": "=$now()" }, "goBack": "previous" } } ], "numberOfVisibleActions": 1 } ], "inputs": {}, "onFocus": { "type": "action.reset-state", "options": { "state": "=@ctx.components.add-expense-form.state.value" } }, "children": [ { "type": "component.form", "instanceId": "add-expense-form", "options": { "children": [ { "type": "component.text-field", "instanceId": "title", "options": { "label": "Title", "isRequired": true, "isAutoFocused": true, "isAutoCorrected": true, "autoCapitalize": "sentences" } }, { "type": "component.number-field", "instanceId": "amount", "options": { "label": "Amount", "isRequired": true, "format": { "numberStyle": "currency" } } }, { "type": "component.dropdown", "instanceId": "categoryId", "options": { "label": "Category", "data": "=@ctx.datasources.expense-categories", "isMultiple": false, "item": { "type": "component.dropdown-item", "options": { "title": "=@ctx.current.item.name", "value": "=@ctx.current.item.id" } }, "isRequired": true, "style": {} } }, { "type": "component.text-field", "instanceId": "description", "options": { "label": "Description", "isRequired": false, "isMultiline": true, "autoCapitalize": "sentences", "isOptionalLabelHidden": true } }, { "type": "component.date-picker", "instanceId": "date", "options": { "label": "Date", "mode": "date", "isRequired": true, "style": {}, "initialValue": "=$now()" } } ], "isDiscardChangesAlertEnabled": false } } ] }, "edit-expense": { "type": "jig.default", "jigId": "edit-expense", "title": "Edit Expense", "actions": [ { "children": [ { "type": "action.execute-entity", "options": { "title": "Update", "provider": "DATA_PROVIDER_DYNAMIC", "entity": "default/expenses", "method": "update", "data": { "id": "=@ctx.inputs.id", "title": "=@ctx.components.title.state.value", "amount": "=@ctx.components.amount.state.value", "categoryId": "=@ctx.components.categoryId.state.value", "date": "=@ctx.components.date.state.value", "description": "=@ctx.components.description.state.value", "timestamp": "=$now()" }, "goBack": "previous" } }, { "type": "action.confirm", "options": { "title": "Delete", "isConfirmedAutomatically": false, "onConfirmed": { "type": "action.execute-entity", "options": { "provider": "DATA_PROVIDER_DYNAMIC", "entity": "default/expenses", "method": "delete", "data": { "id": "=@ctx.inputs.id" }, "goBack": "previous" } }, "modal": { "title": { "text": "Delete Expense?" }, "confirm": "Delete", "cancel": "Cancel" } } } ], "numberOfVisibleActions": 2 } ], "inputs": { "id": { "type": "string", "required": true }, "expenseItem": { "type": "object", "properties": {}, "required": true } }, "children": [ { "type": "component.form", "instanceId": "edit-expense-form", "options": { "children": [ { "type": "component.text-field", "instanceId": "title", "options": { "label": "Title", "isRequired": true, "isAutoFocused": true, "isAutoCorrected": true, "autoCapitalize": "sentences", "initialValue": "=@ctx.inputs.expenseItem.title" } }, { "type": "component.number-field", "instanceId": "amount", "options": { "label": "Amount", "isRequired": true, "format": { "numberStyle": "currency" }, "initialValue": "=@ctx.inputs.expenseItem.amount" } }, { "type": "component.dropdown", "instanceId": "categoryId", "options": { "label": "Category", "data": "=@ctx.datasources.expense-categories", "isMultiple": false, "item": { "type": "component.dropdown-item", "options": { "title": "=@ctx.current.item.name", "value": "=@ctx.current.item.id" } }, "isRequired": true, "style": {}, "initialValue": "=@ctx.inputs.expenseItem.categoryId" } }, { "type": "component.text-field", "instanceId": "description", "options": { "label": "Description", "isRequired": false, "isMultiline": true, "autoCapitalize": "sentences", "initialValue": "=@ctx.inputs.expenseItem.description" } }, { "type": "component.date-picker", "instanceId": "date", "options": { "label": "Date", "mode": "date", "isRequired": true, "style": {}, "initialValue": "=@ctx.inputs.expenseItem.date" } } ], "isDiscardChangesAlertEnabled": false } } ] } }, "functions": {}, "expressions": { "formatCurrency": "=function($amount) {\n '$' & $formatNumber($amount, '#,##0.00')\n}", "formatDate": "=function($date) {\n $fromMillis($toMillis($date), '[D1o] [MNn] [Y]')\n}" }, "actions": {}, "tabs": { "home": { "jigId": "home", "icon": "credit-card", "label": "Expenses" } } }