@jigx/mdk
Version:
Jigx Mobile Development Kit - SDK for building Jigx applications
553 lines • 18.3 kB
JSON
{
"name": "grant-expenses",
"title": "Grant Expenses",
"category": "personal",
"databases": {
"default": {
"databaseId": "default",
"tables": {
"expenses": null,
"expense-categories": null
}
}
},
"datasources": {
"data-expenses": {
"type": "datasource.sqlite",
"datasourceId": "data-expenses",
"instanceId": "data-expenses",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entities": [
"expenses"
],
"query": "\n SELECT \n id,\n json_extract(data, '$.title') as title,\n json_extract(data, '$.amount') as amount,\n json_extract(data, '$.category') as category,\n json_extract(data, '$.date') as date,\n json_extract(data, '$.description') as description,\n timestamp,\n data\n FROM [expenses] \n ORDER BY json_extract(data, '$.date') DESC",
"jsonProperties": [
"data"
]
}
},
"data-expense-categories": {
"type": "datasource.static",
"datasourceId": "data-expense-categories",
"instanceId": "data-expense-categories",
"options": {
"data": [
{
"id": "food",
"name": "Food & Dining",
"icon": "restaurant"
},
{
"id": "transport",
"name": "Transportation",
"icon": "car"
},
{
"id": "accommodation",
"name": "Accommodation",
"icon": "hotel"
},
{
"id": "office",
"name": "Office Supplies",
"icon": "briefcase"
},
{
"id": "technology",
"name": "Technology",
"icon": "laptop"
},
{
"id": "entertainment",
"name": "Entertainment",
"icon": "ticket"
},
{
"id": "health",
"name": "Health & Medical",
"icon": "medical-bag"
},
{
"id": "education",
"name": "Education & Training",
"icon": "academic-cap"
},
{
"id": "other",
"name": "Other",
"icon": "dots-horizontal"
}
]
}
}
},
"jigs": {
"home": {
"type": "jig.default",
"jigId": "home",
"title": "Grant's Expenses",
"datasources": {
"expense-stats": {
"type": "datasource.sqlite",
"datasourceId": "expense-stats",
"instanceId": "expense-stats",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entities": [
"expenses"
],
"query": "\n SELECT \n COUNT(*) as total_expenses,\n SUM(json_extract(data, '$.amount')) as total_amount,\n AVG(json_extract(data, '$.amount')) as avg_amount,\n MAX(json_extract(data, '$.amount')) as max_amount\n FROM [expenses]\n "
}
},
"recent-expenses": {
"type": "datasource.sqlite",
"datasourceId": "recent-expenses",
"instanceId": "recent-expenses",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entities": [
"expenses"
],
"query": "\n SELECT \n id,\n json_extract(data, '$.title') as title,\n json_extract(data, '$.amount') as amount,\n json_extract(data, '$.category') as category,\n json_extract(data, '$.date') as date\n FROM [expenses]\n ORDER BY json_extract(data, '$.date') DESC\n LIMIT 5\n "
}
}
},
"actions": [
{
"children": [
{
"type": "action.go-to",
"instanceId": "add-expense",
"options": {
"title": "Add Expense",
"linkTo": "jig-add-expense"
}
},
{
"type": "action.go-to",
"instanceId": "view-all",
"options": {
"title": "View All",
"linkTo": "jig-expense-list"
}
}
]
}
],
"children": [
{
"instanceId": "overview-card",
"type": "component.card",
"options": {
"children": [
{
"instanceId": "total-count",
"type": "component.text-field",
"options": {
"label": "Total Expenses",
"value": "@ctx.datasources.expense-stats.total_expenses"
}
},
{
"instanceId": "total-amount",
"type": "component.text-field",
"options": {
"label": "Total Amount",
"value": "=$formatCurrency(@ctx.datasources.expense-stats.total_amount)"
}
}
]
}
},
{
"instanceId": "recent-list",
"type": "component.list",
"options": {
"isHorizontal": false,
"isHorizontalScrollIndicatorHidden": true,
"isVerticalScrollIndicatorHidden": true,
"maximumItemsToRender": 10,
"item": {
"instanceId": "recent-expense-item",
"type": "component.list-item",
"options": {
"title": "=@ctx.current.item.title",
"subtitle": "=@ctx.current.item.category & \" • \" & @ctx.current.item.date",
"onPress": {
"type": "action.go-to",
"instanceId": "edit-expense",
"options": {
"linkTo": "jig-edit-expense",
"parameters": {
"$expenseId": "=@ctx.current.item.id"
}
}
}
}
},
"data": "=@ctx.datasources.recent-expenses"
}
}
]
},
"jig-expense-list": {
"type": "jig.default",
"jigId": "jig-expense-list",
"title": "My Expenses",
"datasources": {
"expenses-summary": {
"type": "datasource.sqlite",
"datasourceId": "expenses-summary",
"instanceId": "expenses-summary",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entities": [
"expenses"
],
"query": "\n SELECT \n json_extract(data, '$.category') as category,\n SUM(json_extract(data, '$.amount')) as total_amount,\n COUNT(*) as count\n FROM [expenses]\n GROUP BY json_extract(data, '$.category')\n ORDER BY total_amount DESC\n "
}
}
},
"actions": [
{
"children": [
{
"type": "action.go-to",
"instanceId": "add-expense",
"options": {
"title": "Add New",
"linkTo": "jig-add-expense"
}
}
]
}
],
"children": [
{
"instanceId": "expense-list",
"type": "component.list",
"options": {
"isHorizontal": false,
"isHorizontalScrollIndicatorHidden": true,
"isVerticalScrollIndicatorHidden": true,
"maximumItemsToRender": 10,
"item": {
"instanceId": "expense-item",
"type": "component.list-item",
"options": {
"title": "=@ctx.current.item.title",
"subtitle": "=@ctx.current.item.category & \" • \" & @ctx.current.item.date",
"description": "=@ctx.current.item.description",
"onPress": {
"type": "action.go-to",
"instanceId": "edit-expense",
"options": {
"linkTo": "jig-edit-expense",
"parameters": {
"$expenseId": "=@ctx.current.item.id"
}
}
}
}
},
"data": "=@ctx.datasources.data-expenses"
}
},
{
"instanceId": "summary-card",
"type": "component.card",
"options": {
"children": [
{
"instanceId": "summary-title",
"type": "component.text-field",
"options": {
"label": "Summary by Category",
"value": "Summary by Category"
}
},
{
"instanceId": "summary-list",
"type": "component.list",
"options": {
"isHorizontal": false,
"isHorizontalScrollIndicatorHidden": true,
"isVerticalScrollIndicatorHidden": true,
"maximumItemsToRender": 10,
"item": {
"instanceId": "summary-item",
"type": "component.list-item",
"options": {
"title": "=@ctx.current.item.category",
"subtitle": "=@ctx.current.item.count & \" expenses\""
}
},
"data": "=@ctx.datasources.expenses-summary"
}
}
]
}
}
]
},
"jig-add-expense": {
"type": "jig.default",
"jigId": "jig-add-expense",
"title": "Add New Expense",
"actions": [
{
"children": [
{
"type": "action.action-list",
"instanceId": "save-expense",
"options": {
"title": "Save Expense",
"actions": [
{
"type": "action.execute-entity",
"instanceId": "insert-expense",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entity": "expenses",
"method": "save",
"data": "={\n \"title\": @ctx.form.title,\n \"amount\": @ctx.form.amount,\n \"category\": @ctx.form.category,\n \"date\": @ctx.form.date,\n \"description\": @ctx.form.description,\n \"timestamp\": @ctx.now\n }"
}
},
{
"type": "action.go-back",
"instanceId": "go-back"
}
],
"isSequential": true
}
}
]
}
],
"children": [
{
"instanceId": "expense-form",
"type": "component.form",
"options": {
"children": [
{
"instanceId": "title",
"type": "component.text-field",
"options": {
"label": "Title",
"isRequired": true
}
},
{
"instanceId": "amount",
"type": "component.number-field",
"options": {
"label": "Amount",
"value": 0,
"isRequired": true
}
},
{
"instanceId": "category",
"type": "component.dropdown",
"options": {
"label": "Category",
"data": "=@ctx.datasources.data-expense-categories",
"isMultiple": false,
"item": {
"instanceId": "category-item",
"type": "component.dropdown-item",
"options": {
"title": "=@ctx.current.item.name",
"value": "=@ctx.current.item.id"
}
},
"isRequired": true
}
},
{
"instanceId": "date",
"type": "component.date-picker",
"options": {
"label": "Date",
"mode": "date",
"isRequired": true,
"value": "=@ctx.now"
}
},
{
"instanceId": "description",
"type": "component.text-field",
"options": {
"label": "Description",
"isMultiline": true
}
}
],
"isDiscardChangesAlertEnabled": true
}
}
]
},
"jig-edit-expense": {
"type": "jig.default",
"jigId": "jig-edit-expense",
"title": "Edit Expense",
"datasources": {
"current-expense": {
"type": "datasource.sqlite",
"datasourceId": "current-expense",
"instanceId": "current-expense",
"options": {
"provider": "DATA_PROVIDER_LOCAL",
"entities": [
"expenses"
],
"query": "\n SELECT id, data, timestamp\n FROM [expenses]\n WHERE id = @expenseId\n LIMIT 1\n ",
"queryParameters": {
"expenseId": "=@ctx.jig.parameters.expenseId"
},
"jsonProperties": [
"data"
]
}
}
},
"actions": [
{
"children": [
{
"type": "action.action-list",
"instanceId": "update-expense",
"options": {
"title": "Update Expense",
"actions": [
{
"type": "action.execute-entity",
"instanceId": "update-expense",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entity": "expenses",
"method": "update",
"data": "={\n \"id\": @ctx.datasources.current-expense.id,\n \"title\": @ctx.form.title,\n \"amount\": @ctx.form.amount,\n \"category\": @ctx.form.category,\n \"date\": @ctx.form.date,\n \"description\": @ctx.form.description,\n \"timestamp\": @ctx.now\n }"
}
},
{
"type": "action.go-back",
"instanceId": "go-back"
}
],
"isSequential": true
}
},
{
"type": "action.action-list",
"instanceId": "delete-expense",
"options": {
"title": "Delete Expense",
"actions": [
{
"type": "action.execute-entity",
"instanceId": "delete-expense",
"options": {
"provider": "DATA_PROVIDER_DYNAMIC",
"entity": "expenses",
"method": "delete",
"data": "={\n \"id\": @ctx.datasources.current-expense.id\n }"
}
},
{
"type": "action.go-back",
"instanceId": "go-back"
}
],
"isSequential": true
}
}
]
}
],
"children": [
{
"instanceId": "edit-expense-form",
"type": "component.form",
"options": {
"children": [
{
"instanceId": "title",
"type": "component.text-field",
"options": {
"label": "Title",
"isRequired": true,
"value": "@ctx.datasources.current-expense.title"
}
},
{
"instanceId": "amount",
"type": "component.number-field",
"options": {
"label": "Amount",
"value": "@ctx.datasources.current-expense.amount",
"isRequired": true
}
},
{
"instanceId": "category",
"type": "component.dropdown",
"options": {
"label": "Category",
"data": "=@ctx.datasources.data-expense-categories",
"isMultiple": false,
"item": {
"instanceId": "category-item",
"type": "component.dropdown-item",
"options": {
"title": "=@ctx.current.item.name",
"value": "=@ctx.current.item.id"
}
},
"isRequired": true,
"value": "@ctx.datasources.current-expense.category"
}
},
{
"instanceId": "date",
"type": "component.date-picker",
"options": {
"label": "Date",
"mode": "date",
"isRequired": true,
"value": "@ctx.datasources.current-expense.date"
}
},
{
"instanceId": "description",
"type": "component.text-field",
"options": {
"label": "Description",
"isMultiline": true,
"value": "@ctx.datasources.current-expense.description"
}
}
],
"isDiscardChangesAlertEnabled": true
}
}
]
}
},
"functions": {},
"expressions": {
"formatCurrency": "=function($amount) {\n '$' & $formatNumber($amount, '#,##0.00')\n }"
},
"widgets": [],
"actions": {},
"tabs": {
"home": {
"jigId": "home",
"icon": "credit-card",
"label": "Expenses"
}
}
}