mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
5.3 KiB
237 lines
5.3 KiB
import { Api, UITypes } from 'nocodb-sdk'; |
|
import { rowMixedValue } from './xcdb-records'; |
|
let api: Api<any>; |
|
|
|
const columns = { |
|
selectBased: [ |
|
{ |
|
column_name: 'Id', |
|
title: 'Id', |
|
uidt: UITypes.ID, |
|
}, |
|
{ |
|
column_name: 'SingleSelect', |
|
title: 'SingleSelect', |
|
uidt: UITypes.SingleSelect, |
|
dtxp: "'jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'", |
|
}, |
|
{ |
|
column_name: 'MultiSelect', |
|
title: 'MultiSelect', |
|
uidt: UITypes.MultiSelect, |
|
dtxp: "'jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'", |
|
}, |
|
], |
|
|
|
dateTimeBased: [ |
|
{ |
|
column_name: 'Id', |
|
title: 'Id', |
|
uidt: UITypes.ID, |
|
}, |
|
{ |
|
column_name: 'Date', |
|
title: 'Date', |
|
uidt: UITypes.Date, |
|
}, |
|
], |
|
|
|
textBased: [ |
|
{ |
|
column_name: 'Id', |
|
title: 'Id', |
|
uidt: UITypes.ID, |
|
}, |
|
{ |
|
column_name: 'SingleLineText', |
|
title: 'SingleLineText', |
|
uidt: UITypes.SingleLineText, |
|
}, |
|
{ |
|
column_name: 'MultiLineText', |
|
title: 'MultiLineText', |
|
uidt: UITypes.LongText, |
|
}, |
|
{ |
|
column_name: 'Email', |
|
title: 'Email', |
|
uidt: UITypes.Email, |
|
}, |
|
{ |
|
column_name: 'PhoneNumber', |
|
title: 'PhoneNumber', |
|
uidt: UITypes.PhoneNumber, |
|
}, |
|
{ |
|
column_name: 'URL', |
|
title: 'URL', |
|
uidt: UITypes.URL, |
|
}, |
|
], |
|
|
|
numberBased: [ |
|
{ |
|
column_name: 'Id', |
|
title: 'Id', |
|
uidt: UITypes.ID, |
|
}, |
|
{ |
|
column_name: 'Number', |
|
title: 'Number', |
|
uidt: UITypes.Number, |
|
}, |
|
{ |
|
column_name: 'Decimal', |
|
title: 'Decimal', |
|
uidt: UITypes.Decimal, |
|
}, |
|
{ |
|
column_name: 'Currency', |
|
title: 'Currency', |
|
uidt: UITypes.Currency, |
|
}, |
|
{ |
|
column_name: 'Percent', |
|
title: 'Percent', |
|
uidt: UITypes.Percent, |
|
}, |
|
{ |
|
column_name: 'Duration', |
|
title: 'Duration', |
|
uidt: UITypes.Duration, |
|
}, |
|
{ |
|
column_name: 'Rating', |
|
title: 'Rating', |
|
uidt: UITypes.Rating, |
|
}, |
|
{ |
|
column_name: 'Year', |
|
title: 'Year', |
|
uidt: UITypes.Year, |
|
}, |
|
{ |
|
column_name: 'Time', |
|
title: 'Time', |
|
uidt: UITypes.Time, |
|
}, |
|
], |
|
|
|
miscellaneous: [ |
|
{ |
|
column_name: 'Id', |
|
title: 'Id', |
|
uidt: UITypes.ID, |
|
}, |
|
{ |
|
column_name: 'Checkbox', |
|
title: 'Checkbox', |
|
uidt: UITypes.Checkbox, |
|
}, |
|
{ |
|
column_name: 'Attachment', |
|
title: 'Attachment', |
|
uidt: UITypes.Attachment, |
|
}, |
|
], |
|
}; |
|
|
|
async function createDemoTable({ |
|
context: context, |
|
recordCnt: recordCnt, |
|
type: type, |
|
}: { |
|
context: any; |
|
recordCnt: number; |
|
type: string; |
|
}) { |
|
api = new Api({ |
|
baseURL: `http://localhost:8080/`, |
|
headers: { |
|
'xc-auth': context.token, |
|
}, |
|
}); |
|
|
|
const project = await api.project.read(context.project.id); |
|
const table = await api.base.tableCreate(context.project.id, project.bases?.[0].id, { |
|
table_name: type, |
|
title: type, |
|
columns: columns[type], |
|
}); |
|
|
|
if (recordCnt === 0) return table; |
|
|
|
const rowAttributes = []; |
|
|
|
switch (type) { |
|
case 'selectBased': |
|
try { |
|
for (let i = 0; i < recordCnt; i++) { |
|
const row = { |
|
SingleSelect: rowMixedValue(columns.selectBased[1], i), |
|
MultiSelect: rowMixedValue(columns.selectBased[2], i), |
|
}; |
|
rowAttributes.push(row); |
|
} |
|
} catch (e) { |
|
console.error(e); |
|
} |
|
break; |
|
case 'textBased': |
|
for (let i = 0; i < recordCnt; i++) { |
|
const row = { |
|
SingleLineText: rowMixedValue(columns.textBased[1], i), |
|
MultiLineText: rowMixedValue(columns.textBased[2], i), |
|
Email: rowMixedValue(columns.textBased[3], i), |
|
PhoneNumber: rowMixedValue(columns.textBased[4], i), |
|
URL: rowMixedValue(columns.textBased[5], i), |
|
}; |
|
rowAttributes.push(row); |
|
} |
|
break; |
|
case 'numberBased': |
|
for (let i = 0; i < 400; i++) { |
|
const row = { |
|
Number: rowMixedValue(columns.numberBased[1], i), |
|
Decimal: rowMixedValue(columns.numberBased[2], i), |
|
Currency: rowMixedValue(columns.numberBased[3], i), |
|
Percent: rowMixedValue(columns.numberBased[4], i), |
|
Duration: rowMixedValue(columns.numberBased[5], i), |
|
Rating: rowMixedValue(columns.numberBased[6], i), |
|
Year: rowMixedValue(columns.numberBased[7], i), |
|
Time: rowMixedValue(columns.numberBased[8], i, context.dbType), |
|
}; |
|
rowAttributes.push(row); |
|
} |
|
break; |
|
case 'dateTimeBased': |
|
try { |
|
for (let i = 0; i < recordCnt; i++) { |
|
const row = { |
|
Date: rowMixedValue(columns.dateTimeBased[1], i), |
|
}; |
|
rowAttributes.push(row); |
|
} |
|
} catch (e) { |
|
console.error(e); |
|
} |
|
break; |
|
case 'miscellaneous': |
|
try { |
|
for (let i = 0; i < recordCnt; i++) { |
|
const row = { |
|
Checkbox: rowMixedValue(columns.miscellaneous[1], i), |
|
}; |
|
rowAttributes.push(row); |
|
} |
|
} catch (e) { |
|
console.error(e); |
|
} |
|
break; |
|
} |
|
|
|
await api.dbTableRow.bulkCreate('noco', context.project.id, table.id, rowAttributes); |
|
return table; |
|
} |
|
|
|
export { createDemoTable };
|
|
|