UNPKG

@360works/fmpromise

Version:

A modern JS toolkit for FileMaker Web Viewers, including a dev server and type generation.

45 lines (44 loc) 8.7 kB
import fmPromise from '@360works/fmpromise'; // fetch records using a query with optional parameters let recordsByQuery = await fmPromise.executeFileMakerDataAPIRecords({ action: 'read', layouts: 'User', limit: 123, query: [{ firstName: 'sam' }], offset: 1, portal: ['one'], sort: [{ fieldName: 'name', sortOrder: 'descend' }], version: 'v2' }); // minimal request will fetch everything from a layout let recordsByQueryMinimal = await fmPromise.executeFileMakerDataAPIRecords({ action: 'read', layouts: 'User', query: [{ projectId: 'POJ003' }] }); // minimal request will fetch everything from a layout let recordsByQueryMinimalTyped = await fmPromise.executeFileMakerDataAPIRecords({ action: 'read', layouts: 'User', query: [{ projectId: 'POJ003' }] }); // fetch records using non-deprecated method and convert to records let recordNonDeprecated = (await fmPromise.dataRead({ action: 'read', layouts: 'User', query: [{ projectId: 'POJ003' }] })).toRecords(); // I should be allowed to type the `toRecords()` to my User interface without Typescript complaining let tasksTyped = (await fmPromise.dataRead({ action: 'read', layouts: 'User', query: [{ projectId: 'POJ003' }] })).toRecords(); // fetch records using a recordId with optional parameters let recordsByRecordId = await fmPromise.executeFileMakerDataAPIRecords({ action: 'read', layouts: 'User', limit: 123, recordId: 123, offset: 1, portal: ['one'], sort: [{ fieldName: 'name', sortOrder: 'descend' }], version: 'v2' }); // fetch records using a recordId, minimal required fields let recordsByRecordIdMinimal = await fmPromise.executeFileMakerDataAPIRecords({ action: 'read', layouts: 'User', recordId: 123, }); // fetch records using both recordId and query, not allowed. FIX! would be nice to show an error here. No biggie. let recordsByRecordInvalid = await fmPromise.executeFileMakerDataAPIRecords({ action: 'read', layouts: 'User', recordId: 123, query: [{ projectId: 'POJ003' }] }); // executeFileMakerDataAPIRecords should fail for any action besides "read" // await fmPromise.executeFileMakerDataAPIRecords({action:'metaData', layouts:''}); // fetch metadata for all layouts await fmPromise.executeFileMakerDataAPI({ action: 'metaData', layouts: '' }); // sample response for all layouts: // {"response": {"layouts": [{"name": "User","table": "User"},{"name": "Person","table": "Person"},{"name": "JoinUserUserDetails","table": "JoinUserUser"},{"name": "Drag and Drop","table": "User"},{"name": "fmPromiseModule","table": "fmPromiseModule"},{"name": "fmPromiseWebViewer","table": "fmPromiseWebViewer"},{"name": "slider","table": "User"}]},"messages": [{"code": "0","message": "OK"}]} // fetch metadata for a specific layout await fmPromise.executeFileMakerDataAPI({ action: 'metaData', layouts: 'UserDetail' }); // sample layout-level metadata response: // {"response":{"fieldMetaData":[{"name":"title","type":"normal","displayType":"editText","result":"text","global":false,"autoEnter":false,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":true,"numeric":false,"timeOfDay":false,"repetitionStart":1,"repetitionEnd":1},{"name":"sortOrder","type":"normal","displayType":"editText","result":"number","global":false,"autoEnter":true,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":false,"numeric":true,"timeOfDay":false,"repetitionStart":1,"repetitionEnd":1},{"name":"dueDate","type":"normal","displayType":"editText","result":"date","global":false,"autoEnter":false,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":false,"numeric":false,"timeOfDay":false,"repetitionStart":1,"repetitionEnd":1},{"name":"difficulty","type":"normal","displayType":"popupMenu","result":"number","global":false,"autoEnter":true,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":false,"numeric":false,"timeOfDay":false,"valueList":"difficulty","repetitionStart":1,"repetitionEnd":1},{"name":"id","type":"normal","displayType":"editText","result":"text","global":false,"autoEnter":true,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":true,"numeric":false,"timeOfDay":false,"repetitionStart":1,"repetitionEnd":1}],"portalMetaData":{"T_JoinUserUser_User":[{"name":"T_JoinUserUser_User::userId","type":"normal","displayType":"editText","result":"text","global":false,"autoEnter":false,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":false,"numeric":false,"timeOfDay":false,"repetitionStart":1,"repetitionEnd":1}],"User":[{"name":"title","type":"normal","displayType":"editText","result":"text","global":false,"autoEnter":false,"fourDigitYear":false,"maxRepeat":1,"maxCharacters":0,"notEmpty":true,"numeric":false,"timeOfDay":false,"repetitionStart":1,"repetitionEnd":1}]},"valueLists":[{"name":"difficulty","type":"customList","values":[{"displayValue":"1","value":"1"},{"displayValue":"2","value":"2"},{"displayValue":"3","value":"3"},{"displayValue":"4","value":"4"},{"displayValue":"5","value":"5"}]}],"table":"User"},"messages":[{"code":"0","message":"OK"}]} // fetch metadata for a base table, returns all fields for a table. This is the only time `layouts` can be omitted let metaUserTable = await fmPromise.executeFileMakerDataAPI({ action: 'metaData', tables: 'User' }); // sample table-level metadata response: // {"response": {"fieldMetaData": [{"name": "id","type": "normal","result": "text","global": false,"autoEnter": true,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "createdTimestamp","type": "normal","result": "timeStamp","global": false,"autoEnter": true,"fourDigitYear": true,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "createdBy","type": "normal","result": "text","global": false,"autoEnter": true,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "_modifiedTrigger","type": "normal","result": "timeStamp","global": false,"autoEnter": true,"fourDigitYear": true,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "modifiedTimestamp","type": "normal","result": "timeStamp","global": false,"autoEnter": true,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "modifiedBy","type": "normal","result": "text","global": false,"autoEnter": true,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "title","type": "normal","result": "text","global": false,"autoEnter": false,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": true,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "sortOrder","type": "normal","result": "number","global": false,"autoEnter": true,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": false,"numeric": true,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "dueDate","type": "normal","result": "date","global": false,"autoEnter": false,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": false,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1},{"name": "difficulty","type": "normal","result": "number","global": false,"autoEnter": true,"fourDigitYear": false,"maxRepeat": 1,"maxCharacters": 0,"notEmpty": false,"numeric": false,"timeOfDay": false,"repetitionStart": 1,"repetitionEnd": 1}],"portalMetaData": {},"baseTable": "User"},"messages": [{"code": "0","message": "OK"}]} // sample metadata response // modifications // creating a new record: don't provide a modId or recordId let created = await fmPromise.executeFileMakerDataAPI({ action: 'create', layouts: 'User', fieldData: { name: 'bob' }, version: 'v2' }); // updating: must provide a recordId, optional modId let updated = await fmPromise.executeFileMakerDataAPI({ action: 'update', layouts: 'User', fieldData: { name: 'bob' }, recordId: 123, modId: 123, version: 'v2' }); // minimal required params for an update operation let updatedMinimal = await fmPromise.executeFileMakerDataAPI({ action: 'update', layouts: 'User', fieldData: { name: 'bob' }, recordId: 123 }); // delete response will be mostly empty let deleted = await fmPromise.executeFileMakerDataAPI({ action: 'delete', layouts: 'User', recordId: 123, modId: 123, version: 'v2' }); let first = recordsByQuery[0]; first.modId; first.recordId;