@jigx/mdk
Version:
Jigx Mobile Development Kit - SDK for building Jigx applications
548 lines • 17.7 kB
JSON
{
"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"
}
}
}