|
|
@ -1,5 +1,6 @@ |
|
|
|
import FetchAT from './fetchAT'; |
|
|
|
import FetchAT from './fetchAT'; |
|
|
|
import { UITypes } from 'nocodb-sdk'; |
|
|
|
import { UITypes } from 'nocodb-sdk'; |
|
|
|
|
|
|
|
import { Tele } from 'nc-help'; |
|
|
|
// import * as sMap from './syncMap';
|
|
|
|
// import * as sMap from './syncMap';
|
|
|
|
import FormData from 'form-data'; |
|
|
|
import FormData from 'form-data'; |
|
|
|
|
|
|
|
|
|
|
@ -70,7 +71,6 @@ export default async ( |
|
|
|
let base, baseId; |
|
|
|
let base, baseId; |
|
|
|
const start = Date.now(); |
|
|
|
const start = Date.now(); |
|
|
|
const enableErrorLogs = false; |
|
|
|
const enableErrorLogs = false; |
|
|
|
const process_aTblData = true; |
|
|
|
|
|
|
|
const generate_migrationStats = true; |
|
|
|
const generate_migrationStats = true; |
|
|
|
const debugMode = false; |
|
|
|
const debugMode = false; |
|
|
|
let api: Api<any>; |
|
|
|
let api: Api<any>; |
|
|
@ -387,7 +387,7 @@ export default async ( |
|
|
|
for (let i = 0; i < tblSchema.length; ++i) { |
|
|
|
for (let i = 0; i < tblSchema.length; ++i) { |
|
|
|
const table: any = {}; |
|
|
|
const table: any = {}; |
|
|
|
|
|
|
|
|
|
|
|
if (syncDB.syncViews) { |
|
|
|
if (syncDB.options.syncViews) { |
|
|
|
rtc.view.total += tblSchema[i].views.reduce( |
|
|
|
rtc.view.total += tblSchema[i].views.reduce( |
|
|
|
(acc, cur) => |
|
|
|
(acc, cur) => |
|
|
|
['grid', 'form', 'gallery'].includes(cur.type) ? ++acc : acc, |
|
|
|
['grid', 'form', 'gallery'].includes(cur.type) ? ++acc : acc, |
|
|
@ -1506,7 +1506,7 @@ export default async ( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
async function nocoConfigureGalleryView(sDB, aTblSchema) { |
|
|
|
async function nocoConfigureGalleryView(sDB, aTblSchema) { |
|
|
|
if (!sDB.syncViews) return; |
|
|
|
if (!sDB.options.syncViews) return; |
|
|
|
for (let idx = 0; idx < aTblSchema.length; idx++) { |
|
|
|
for (let idx = 0; idx < aTblSchema.length; idx++) { |
|
|
|
const tblId = (await nc_getTableSchema(aTblSchema[idx].name)).id; |
|
|
|
const tblId = (await nc_getTableSchema(aTblSchema[idx].name)).id; |
|
|
|
const galleryViews = aTblSchema[idx].views.filter( |
|
|
|
const galleryViews = aTblSchema[idx].views.filter( |
|
|
@ -1545,7 +1545,7 @@ export default async ( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
async function nocoConfigureFormView(sDB, aTblSchema) { |
|
|
|
async function nocoConfigureFormView(sDB, aTblSchema) { |
|
|
|
if (!sDB.syncViews) return; |
|
|
|
if (!sDB.options.syncViews) return; |
|
|
|
for (let idx = 0; idx < aTblSchema.length; idx++) { |
|
|
|
for (let idx = 0; idx < aTblSchema.length; idx++) { |
|
|
|
const tblId = sMap.getNcIdFromAtId(aTblSchema[idx].id); |
|
|
|
const tblId = sMap.getNcIdFromAtId(aTblSchema[idx].id); |
|
|
|
const formViews = aTblSchema[idx].views.filter(x => x.type === 'form'); |
|
|
|
const formViews = aTblSchema[idx].views.filter(x => x.type === 'form'); |
|
|
@ -1623,11 +1623,11 @@ export default async ( |
|
|
|
const gridViews = aTblSchema[idx].views.filter(x => x.type === 'grid'); |
|
|
|
const gridViews = aTblSchema[idx].views.filter(x => x.type === 'grid'); |
|
|
|
|
|
|
|
|
|
|
|
let viewCnt = idx; |
|
|
|
let viewCnt = idx; |
|
|
|
if (syncDB.syncViews) |
|
|
|
if (syncDB.options.syncViews) |
|
|
|
viewCnt = rtc.view.grid + rtc.view.gallery + rtc.view.form; |
|
|
|
viewCnt = rtc.view.grid + rtc.view.gallery + rtc.view.form; |
|
|
|
rtc.view.grid += gridViews.length; |
|
|
|
rtc.view.grid += gridViews.length; |
|
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < (sDB.syncViews ? gridViews.length : 1); i++) { |
|
|
|
for (let i = 0; i < (sDB.options.syncViews ? gridViews.length : 1); i++) { |
|
|
|
logDetailed(` Axios fetch view-data`); |
|
|
|
logDetailed(` Axios fetch view-data`); |
|
|
|
// fetch viewData JSON
|
|
|
|
// fetch viewData JSON
|
|
|
|
const vData = await getViewData(gridViews[i].id); |
|
|
|
const vData = await getViewData(gridViews[i].id); |
|
|
@ -1870,6 +1870,32 @@ export default async ( |
|
|
|
spaces: 2 |
|
|
|
spaces: 2 |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tele.event({ |
|
|
|
|
|
|
|
event: 'a:airtable-import:success', |
|
|
|
|
|
|
|
data: { |
|
|
|
|
|
|
|
stats: { |
|
|
|
|
|
|
|
migrationTime: duration, |
|
|
|
|
|
|
|
totalTables: aTblSchema.length, |
|
|
|
|
|
|
|
totalColumns: columnSum, |
|
|
|
|
|
|
|
links: linkSum, |
|
|
|
|
|
|
|
lookup: lookupSum, |
|
|
|
|
|
|
|
rollup: rollupSum, |
|
|
|
|
|
|
|
totalFilters: rtc.filter, |
|
|
|
|
|
|
|
totalSort: rtc.sort, |
|
|
|
|
|
|
|
view: { |
|
|
|
|
|
|
|
total: rtc.view.total, |
|
|
|
|
|
|
|
grid: rtc.view.grid, |
|
|
|
|
|
|
|
gallery: rtc.view.gallery, |
|
|
|
|
|
|
|
form: rtc.view.form |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
axios: { |
|
|
|
|
|
|
|
count: rtc.fetchAt.count, |
|
|
|
|
|
|
|
time: rtc.fetchAt.time |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////
|
|
|
|
//////////////////////////////
|
|
|
@ -2113,21 +2139,26 @@ export default async ( |
|
|
|
await nocoCreateLinkToAnotherRecord(aTblSchema); |
|
|
|
await nocoCreateLinkToAnotherRecord(aTblSchema); |
|
|
|
logDetailed('Migrating LTAR columns completed'); |
|
|
|
logDetailed('Migrating LTAR columns completed'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (syncDB.options.syncLookup) { |
|
|
|
logDetailed(`Configuring Lookup`); |
|
|
|
logDetailed(`Configuring Lookup`); |
|
|
|
// add look-ups
|
|
|
|
// add look-ups
|
|
|
|
await nocoCreateLookups(aTblSchema); |
|
|
|
await nocoCreateLookups(aTblSchema); |
|
|
|
logDetailed('Migrating Lookup columns completed'); |
|
|
|
logDetailed('Migrating Lookup columns completed'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (syncDB.options.syncRollup) { |
|
|
|
logDetailed('Configuring Rollup'); |
|
|
|
logDetailed('Configuring Rollup'); |
|
|
|
// add roll-ups
|
|
|
|
// add roll-ups
|
|
|
|
await nocoCreateRollup(aTblSchema); |
|
|
|
await nocoCreateRollup(aTblSchema); |
|
|
|
logDetailed('Migrating Rollup columns completed'); |
|
|
|
logDetailed('Migrating Rollup columns completed'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (syncDB.options.syncLookup) { |
|
|
|
logDetailed('Migrating Lookup form Rollup columns'); |
|
|
|
logDetailed('Migrating Lookup form Rollup columns'); |
|
|
|
// lookups for rollup
|
|
|
|
// lookups for rollup
|
|
|
|
await nocoLookupForRollup(); |
|
|
|
await nocoLookupForRollup(); |
|
|
|
logDetailed('Migrating Lookup form Rollup columns completed'); |
|
|
|
logDetailed('Migrating Lookup form Rollup columns completed'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
logDetailed('Configuring Primary value column'); |
|
|
|
logDetailed('Configuring Primary value column'); |
|
|
|
// configure primary values
|
|
|
|
// configure primary values
|
|
|
|
await nocoSetPrimary(aTblSchema); |
|
|
|
await nocoSetPrimary(aTblSchema); |
|
|
@ -2148,7 +2179,7 @@ export default async ( |
|
|
|
await nocoConfigureGalleryView(syncDB, aTblSchema); |
|
|
|
await nocoConfigureGalleryView(syncDB, aTblSchema); |
|
|
|
logDetailed('Syncing views completed'); |
|
|
|
logDetailed('Syncing views completed'); |
|
|
|
|
|
|
|
|
|
|
|
if (process_aTblData) { |
|
|
|
if (syncDB.options.syncData) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
// await nc_DumpTableSchema();
|
|
|
|
// await nc_DumpTableSchema();
|
|
|
|
const _perfStart = recordPerfStart(); |
|
|
|
const _perfStart = recordPerfStart(); |
|
|
@ -2226,6 +2257,10 @@ export default async ( |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
} catch (e) { |
|
|
|
if (e.response?.data?.msg) { |
|
|
|
if (e.response?.data?.msg) { |
|
|
|
|
|
|
|
Tele.event({ |
|
|
|
|
|
|
|
event: 'a:airtable-import:error', |
|
|
|
|
|
|
|
data: { error: e.response.data.msg } |
|
|
|
|
|
|
|
}); |
|
|
|
throw new Error(e.response.data.msg); |
|
|
|
throw new Error(e.response.data.msg); |
|
|
|
} |
|
|
|
} |
|
|
|
throw e; |
|
|
|
throw e; |
|
|
@ -2254,5 +2289,12 @@ export interface AirtableSyncConfig { |
|
|
|
projectId?: string; |
|
|
|
projectId?: string; |
|
|
|
apiKey: string; |
|
|
|
apiKey: string; |
|
|
|
shareId: string; |
|
|
|
shareId: string; |
|
|
|
|
|
|
|
options: { |
|
|
|
syncViews: boolean; |
|
|
|
syncViews: boolean; |
|
|
|
|
|
|
|
syncData: boolean; |
|
|
|
|
|
|
|
syncRollup: boolean; |
|
|
|
|
|
|
|
syncLookup: boolean; |
|
|
|
|
|
|
|
syncFormula: boolean; |
|
|
|
|
|
|
|
syncAttachment: boolean; |
|
|
|
|
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|