mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-05 22:38:48 +00:00
Merge pull request #13129 from ToolJet/fix-import-export-container-form
Fix Container and form on import adding header and footer by default
This commit is contained in:
commit
d988b83469
1 changed files with 60 additions and 40 deletions
|
|
@ -73,7 +73,11 @@ type NewRevampedComponent =
|
|||
| 'VerticalDivider'
|
||||
| 'Link'
|
||||
| 'DaterangePicker'
|
||||
| 'TextArea';
|
||||
| 'TextArea'
|
||||
| 'Container'
|
||||
| 'Tabs'
|
||||
| 'Form'
|
||||
|
||||
|
||||
const DefaultDataSourceNames: DefaultDataSourceName[] = [
|
||||
'restapidefault',
|
||||
|
|
@ -95,6 +99,10 @@ const NewRevampedComponents: NewRevampedComponent[] = [
|
|||
'Link',
|
||||
'DaterangePicker',
|
||||
'TextArea',
|
||||
'Container',
|
||||
'Tabs',
|
||||
'Form'
|
||||
|
||||
];
|
||||
|
||||
@Injectable()
|
||||
|
|
@ -106,7 +114,7 @@ export class AppImportExportService {
|
|||
protected usersUtilService: UsersUtilService,
|
||||
protected componentsService: ComponentsService,
|
||||
protected entityManager: EntityManager
|
||||
) {}
|
||||
) { }
|
||||
|
||||
async export(user: User, id: string, searchParams: any = {}): Promise<{ appV2: App }> {
|
||||
// https://github.com/typeorm/typeorm/issues/3857
|
||||
|
|
@ -218,10 +226,10 @@ export class AppImportExportService {
|
|||
...page,
|
||||
permissions: groupPermission
|
||||
? {
|
||||
permissionGroup: groupPermission.users
|
||||
.map((user) => user.permissionGroup?.name)
|
||||
.filter((name): name is string => Boolean(name)),
|
||||
}
|
||||
permissionGroup: groupPermission.users
|
||||
.map((user) => user.permissionGroup?.name)
|
||||
.filter((name): name is string => Boolean(name)),
|
||||
}
|
||||
: undefined,
|
||||
};
|
||||
});
|
||||
|
|
@ -233,10 +241,10 @@ export class AppImportExportService {
|
|||
...query,
|
||||
permissions: groupPermission
|
||||
? {
|
||||
permissionGroup: groupPermission.users
|
||||
.map((user) => user.permissionGroup?.name)
|
||||
.filter((name): name is string => Boolean(name)),
|
||||
}
|
||||
permissionGroup: groupPermission.users
|
||||
.map((user) => user.permissionGroup?.name)
|
||||
.filter((name): name is string => Boolean(name)),
|
||||
}
|
||||
: undefined,
|
||||
};
|
||||
});
|
||||
|
|
@ -244,16 +252,16 @@ export class AppImportExportService {
|
|||
const components =
|
||||
pages.length > 0
|
||||
? await manager
|
||||
.createQueryBuilder(Component, 'components')
|
||||
.leftJoinAndSelect('components.layouts', 'layouts')
|
||||
.leftJoinAndSelect('components.permissions', 'permission')
|
||||
.leftJoinAndSelect('permission.users', 'componentUser')
|
||||
.leftJoinAndSelect('componentUser.permissionGroup', 'permissionGroup')
|
||||
.where('components.pageId IN(:...pageId)', {
|
||||
pageId: pages.map((v) => v.id),
|
||||
})
|
||||
.orderBy('components.created_at', 'ASC')
|
||||
.getMany()
|
||||
.createQueryBuilder(Component, 'components')
|
||||
.leftJoinAndSelect('components.layouts', 'layouts')
|
||||
.leftJoinAndSelect('components.permissions', 'permission')
|
||||
.leftJoinAndSelect('permission.users', 'componentUser')
|
||||
.leftJoinAndSelect('componentUser.permissionGroup', 'permissionGroup')
|
||||
.where('components.pageId IN(:...pageId)', {
|
||||
pageId: pages.map((v) => v.id),
|
||||
})
|
||||
.orderBy('components.created_at', 'ASC')
|
||||
.getMany()
|
||||
: [];
|
||||
|
||||
const appModules = components.filter((c) => c.type === 'ModuleViewer' || c.properties?.moduleAppId);
|
||||
|
|
@ -276,10 +284,10 @@ export class AppImportExportService {
|
|||
...component,
|
||||
permissions: groupPermission
|
||||
? {
|
||||
permissionGroup: groupPermission.users
|
||||
.map((user) => user.permissionGroup?.name)
|
||||
.filter((name): name is string => Boolean(name)),
|
||||
}
|
||||
permissionGroup: groupPermission.users
|
||||
.map((user) => user.permissionGroup?.name)
|
||||
.filter((name): name is string => Boolean(name)),
|
||||
}
|
||||
: undefined,
|
||||
};
|
||||
});
|
||||
|
|
@ -334,11 +342,11 @@ export class AppImportExportService {
|
|||
const existingModules =
|
||||
moduleAppNames.length > 0
|
||||
? await this.entityManager
|
||||
.createQueryBuilder(App, 'app')
|
||||
.where('app.name IN (:...moduleAppNames)', { moduleAppNames })
|
||||
.andWhere('app.organizationId = :organizationId', { organizationId: user.organizationId })
|
||||
.distinct(true)
|
||||
.getMany()
|
||||
.createQueryBuilder(App, 'app')
|
||||
.where('app.name IN (:...moduleAppNames)', { moduleAppNames })
|
||||
.andWhere('app.organizationId = :organizationId', { organizationId: user.organizationId })
|
||||
.distinct(true)
|
||||
.getMany()
|
||||
: [];
|
||||
|
||||
// Process each module from the import data
|
||||
|
|
@ -402,7 +410,6 @@ export class AppImportExportService {
|
|||
if (typeof appParamsObj !== 'object') {
|
||||
throw new BadRequestException('Invalid params for app import');
|
||||
}
|
||||
|
||||
let appParams = appParamsObj;
|
||||
|
||||
if (appParams?.appV2) {
|
||||
|
|
@ -1018,9 +1025,9 @@ export class AppImportExportService {
|
|||
const pageComponents = importingComponents.filter((component) => component.pageId === page.id);
|
||||
|
||||
const newComponentIdsMap = {};
|
||||
|
||||
for (const component of pageComponents) {
|
||||
newComponentIdsMap[component.id] = uuid();
|
||||
|
||||
}
|
||||
|
||||
for (const component of pageComponents) {
|
||||
|
|
@ -1034,6 +1041,7 @@ export class AppImportExportService {
|
|||
}
|
||||
|
||||
const isParentTabOrCalendar = isChildOfTabsOrCalendar(component, pageComponents, parentId, true);
|
||||
const isParentHeaderOrFooter = component?.parent && (component?.parent.includes('header') || component?.parent.includes('footer'));
|
||||
|
||||
if (isParentTabOrCalendar) {
|
||||
const childTabId = component?.parent ? component.parent?.match(/([a-fA-F0-9-]{36})-(.+)/)?.[2] : null;
|
||||
|
|
@ -1047,6 +1055,11 @@ export class AppImportExportService {
|
|||
const mappedParentId = newComponentIdsMap[_parentId];
|
||||
|
||||
parentId = `${mappedParentId}-modal`;
|
||||
} else if (isParentHeaderOrFooter) {
|
||||
const _parentId = component?.parent ? component.parent?.match(/([a-fA-F0-9-]{36})-(.+)/)?.[1] : null;
|
||||
const mappedParentId = newComponentIdsMap[_parentId];
|
||||
const headerOrFooter = component.parent?.includes('header') ? 'header' : 'footer';
|
||||
parentId = `${mappedParentId}-${headerOrFooter}`;
|
||||
} else {
|
||||
if (component.parent && !newComponentIdsMap[parentId]) {
|
||||
skipComponent = true;
|
||||
|
|
@ -1366,10 +1379,10 @@ export class AppImportExportService {
|
|||
const options =
|
||||
importingDataSource.kind === 'tooljetdb'
|
||||
? this.replaceTooljetDbTableIds(
|
||||
importingQuery.options,
|
||||
externalResourceMappings['tooljet_database'],
|
||||
organizationId
|
||||
)
|
||||
importingQuery.options,
|
||||
externalResourceMappings['tooljet_database'],
|
||||
organizationId
|
||||
)
|
||||
: importingQuery.options;
|
||||
|
||||
const newQuery = manager.create(DataQuery, {
|
||||
|
|
@ -2085,10 +2098,10 @@ export class AppImportExportService {
|
|||
options:
|
||||
dataSourceId == defaultDataSourceIds['tooljetdb']
|
||||
? this.replaceTooljetDbTableIds(
|
||||
query.options,
|
||||
externalResourceMappings['tooljet_database'],
|
||||
user?.organizationId
|
||||
)
|
||||
query.options,
|
||||
externalResourceMappings['tooljet_database'],
|
||||
user?.organizationId
|
||||
)
|
||||
: query.options,
|
||||
});
|
||||
await manager.save(newQuery);
|
||||
|
|
@ -2323,7 +2336,6 @@ function migrateProperties(
|
|||
const general = { ...component.general };
|
||||
const validation = { ...component.validation };
|
||||
const generalStyles = { ...component.generalStyles };
|
||||
|
||||
if (!tooljetVersion) {
|
||||
return { properties, styles, general, generalStyles, validation };
|
||||
}
|
||||
|
|
@ -2371,6 +2383,14 @@ function migrateProperties(
|
|||
delete properties.maxValue;
|
||||
}
|
||||
}
|
||||
if (componentType === 'Container') {
|
||||
properties.showHeader = properties?.showHeader || false;
|
||||
}
|
||||
|
||||
if (componentType === 'Form') {
|
||||
properties.showHeader = properties?.showHeader || false;
|
||||
properties.showFooter = properties?.showFooter || false;
|
||||
}
|
||||
}
|
||||
return { properties, styles, general, generalStyles, validation };
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue