@flatfile/angular-sdk
Version:
Flatfile SDK for Angular
102 lines • 13.8 kB
JavaScript
import { Injectable, signal, computed } from '@angular/core';
import { createWorkbookFromSheet, initNewSpace, } from '@flatfile/embedded-utils';
import getSpace from '../../utils/getSpace';
import * as i0 from "@angular/core";
const DEFAULT_API_URL = 'https://platform.flatfile.com/api';
export class SpaceService {
constructor() {
this._loading = signal(false);
this.loading = computed(() => this._loading());
this._spaceInitialized = signal(undefined);
this.spaceInitialized = computed(() => this._spaceInitialized());
this.OpenEmbed = this.startFlatfile;
}
async getOrCreateSpace(spaceProps) {
const { publishableKey } = spaceProps;
if (!publishableKey) {
return getSpace(spaceProps);
}
const { name, namespace, languageOverride, translationsPath, workbook, document, themeConfig, sidebarConfig, userInfo, apiUrl, sheet, onSubmit, } = spaceProps;
let createdWorkbook = workbook;
const isAutoConfig = !createdWorkbook && !sheet;
if (!createdWorkbook && sheet) {
createdWorkbook = createWorkbookFromSheet(sheet, !!onSubmit);
}
return initNewSpace({
name,
namespace,
languageOverride,
translationsPath,
publishableKey,
workbook: createdWorkbook,
document,
themeConfig,
sidebarConfig,
userInfo,
isAutoConfig,
apiUrl: apiUrl || DEFAULT_API_URL,
});
}
async initSpace(spaceProps) {
if (!spaceProps) {
console.warn('spaceProps is required');
return;
}
if (this.spaceInitialized() && !this.config?.resetOnClose) {
console.warn('Space is already initialized');
return;
}
this._loading.set(true);
spaceProps.apiUrl ||= DEFAULT_API_URL;
window.CROSSENV_FLATFILE_API_URL = spaceProps.apiUrl;
this.currentSpaceProps = spaceProps;
try {
this.spaceResponse = await this.getOrCreateSpace(spaceProps);
const { space } = this.spaceResponse;
if (!space) {
throw new Error('Missing space from response');
}
const { id: spaceId, accessToken, guestLink } = space;
if (!spaceId || typeof spaceId !== 'string') {
throw new Error('Missing spaceId from space response');
}
if (!guestLink || typeof guestLink !== 'string') {
throw new Error('Missing guest link from space response');
}
if (!accessToken || typeof accessToken !== 'string') {
throw new Error('Missing access token from space response');
}
const formattedSpaceProps = {
...spaceProps,
spaceUrl: guestLink,
localAccessToken: accessToken,
apiUrl: spaceProps.apiUrl,
workbook: spaceProps.workbook || this.spaceResponse.workbooks?.[0],
};
this._spaceInitialized.set(formattedSpaceProps);
this._loading.set(false);
return formattedSpaceProps;
}
catch (error) {
console.error('Failed to initialize space:', error);
throw error;
}
}
async startFlatfile(spaceProps) {
this.currentSpaceProps = spaceProps;
return this.initSpace(this.currentSpaceProps);
}
closeEmbed() {
this._loading.set(false);
this._spaceInitialized.set(undefined);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpaceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpaceService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpaceService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2RrL3NwYWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVELE9BQU8sRUFJTCx1QkFBdUIsRUFDdkIsWUFBWSxHQUViLE1BQU0sMEJBQTBCLENBQUE7QUFDakMsT0FBTyxRQUE0QixNQUFNLHNCQUFzQixDQUFBOztBQUsvRCxNQUFNLGVBQWUsR0FBRyxtQ0FBbUMsQ0FBQTtBQUszRCxNQUFNLE9BQU8sWUFBWTtJQUh6QjtRQUltQixhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hDLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFFakMsc0JBQWlCLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQTtRQUNqRSxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQTtRQWdIcEUsY0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7S0FVL0I7SUEvR1MsS0FBSyxDQUFDLGdCQUFnQixDQUM1QixVQUE4QjtRQUU5QixNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7U0FDNUI7UUFFRCxNQUFNLEVBQ0osSUFBSSxFQUNKLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLGFBQWEsRUFDYixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEdB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LEtBQUssQ0FBQyxDQUFBO1lBQ25ELE1BQU0sS0FBSyxDQUFBO1NBQ1o7SUFDSCxDQUFDO0lBR0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFrQjtRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFBO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdkMsQ0FBQzsrR0E5SFUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIHR5cGUgSVNwYWNlLFxuICB0eXBlIFJldXNlZFNwYWNlV2l0aEFjY2Vzc1Rva2VuLFxuICB0eXBlIFNpbXBsZU9uYm9hcmRpbmcsXG4gIGNyZWF0ZVdvcmtib29rRnJvbVNoZWV0LFxuICBpbml0TmV3U3BhY2UsXG4gIEluaXRpYWxSZXNvdXJjZURhdGEsXG59IGZyb20gJ0BmbGF0ZmlsZS9lbWJlZGRlZC11dGlscydcbmltcG9ydCBnZXRTcGFjZSwgeyBHZXRTcGFjZVJldHVybiB9IGZyb20gJy4uLy4uL3V0aWxzL2dldFNwYWNlJ1xuaW1wb3J0IHsgRmxhdGZpbGUgfSBmcm9tICdAZmxhdGZpbGUvYXBpJ1xuXG50eXBlIFJldXNlZE9yT25ib2FyZGluZyA9IFJldXNlZFNwYWNlV2l0aEFjY2Vzc1Rva2VuIHwgU2ltcGxlT25ib2FyZGluZ1xuXG5jb25zdCBERUZBVUxUX0FQSV9VUkwgPSAnaHR0cHM6Ly9wbGF0Zm9ybS5mbGF0ZmlsZS5jb20vYXBpJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU3BhY2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZyA9IHNpZ25hbChmYWxzZSlcbiAgcmVhZG9ubHkgbG9hZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2xvYWRpbmcoKSlcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zcGFjZUluaXRpYWxpemVkID0gc2lnbmFsPG9iamVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICByZWFkb25seSBzcGFjZUluaXRpYWxpemVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fc3BhY2VJbml0aWFsaXplZCgpKVxuXG4gIHByaXZhdGUgY3VycmVudFNwYWNlUHJvcHM/OiBJU3BhY2VcbiAgbG9jYWxTcGFjZURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWRcblxuICBzcGFjZVJlc3BvbnNlPzogUGFydGlhbDxJbml0aWFsUmVzb3VyY2VEYXRhPiAmIHsgc3BhY2U6IEZsYXRmaWxlLlNwYWNlIH1cblxuICBjb25maWc/OiB7XG4gICAgcmVzZXRPbkNsb3NlOiBib29sZWFuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE9yQ3JlYXRlU3BhY2UoXG4gICAgc3BhY2VQcm9wczogUmV1c2VkT3JPbmJvYXJkaW5nXG4gICk6IFByb21pc2U8SW5pdGlhbFJlc291cmNlRGF0YSB8IEdldFNwYWNlUmV0dXJuPiB7XG4gICAgY29uc3QgeyBwdWJsaXNoYWJsZUtleSB9ID0gc3BhY2VQcm9wc1xuICAgIGlmICghcHVibGlzaGFibGVLZXkpIHtcbiAgICAgIHJldHVybiBnZXRTcGFjZShzcGFjZVByb3BzKVxuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBsYW5ndWFnZU92ZXJyaWRlLFxuICAgICAgdHJhbnNsYXRpb25zUGF0aCxcbiAgICAgIHdvcmtib29rLFxuICAgICAgZG9jdW1lbnQsXG4gICAgICB0aGVtZUNvbmZpZyxcbiAgICAgIHNpZGViYXJDb25maWcsXG4gICAgICB1c2VySW5mbyxcbiAgICAgIGFwaVVybCxcbiAgICAgIHNoZWV0LFxuICAgICAgb25TdWJtaXQsXG4gICAgfSA9IHNwYWNlUHJvcHNcblxuICAgIGxldCBjcmVhdGVkV29ya2Jvb2sgPSB3b3JrYm9va1xuICAgIGNvbnN0IGlzQXV0b0NvbmZpZyA9ICFjcmVhdGVkV29ya2Jvb2sgJiYgIXNoZWV0XG5cbiAgICBpZiAoIWNyZWF0ZWRXb3JrYm9vayAmJiBzaGVldCkge1xuICAgICAgY3JlYXRlZFdvcmtib29rID0gY3JlYXRlV29ya2Jvb2tGcm9tU2hlZXQoc2hlZXQsICEhb25TdWJtaXQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXROZXdTcGFjZSh7XG4gICAgICBuYW1lLFxuICAgICAgbmFtZXNwYWNlLFxuICAgICAgbGFuZ3VhZ2VPdmVycmlkZSxcbiAgICAgIHRyYW5zbGF0aW9uc1BhdGgsXG4gICAgICBwdWJsaXNoYWJsZUtleSxcbiAgICAgIHdvcmtib29rOiBjcmVhdGVkV29ya2Jvb2ssXG4gICAgICBkb2N1bWVudCxcbiAgICAgIHRoZW1lQ29uZmlnLFxuICAgICAgc2lkZWJhckNvbmZpZyxcbiAgICAgIHVzZXJJbmZvLFxuICAgICAgaXNBdXRvQ29uZmlnLFxuICAgICAgYXBpVXJsOiBhcGlVcmwgfHwgREVGQVVMVF9BUElfVVJMLFxuICAgIH0pXG4gIH1cblxuICBhc3luYyBpbml0U3BhY2Uoc3BhY2VQcm9wczogSVNwYWNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXNwYWNlUHJvcHMpIHtcbiAgICAgIGNvbnNvbGUud2Fybignc3BhY2VQcm9wcyBpcyByZXF1aXJlZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zcGFjZUluaXRpYWxpemVkKCkgJiYgIXRoaXMuY29uZmlnPy5yZXNldE9uQ2xvc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybignU3BhY2UgaXMgYWxyZWFkeSBpbml0aWFsaXplZCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fbG9hZGluZy5zZXQodHJ1ZSlcblxuICAgIHNwYWNlUHJvcHMuYXBpVXJsIHx8PSBERUZBVUxUX0FQSV9VUkxcbiAgICA7KHdpbmRvdyBhcyBhbnkpLkNST1NTRU5WX0ZMQVRGSUxFX0FQSV9VUkwgPSBzcGFjZVByb3BzLmFwaVVybFxuXG4gICAgdGhpcy5jdXJyZW50U3BhY2VQcm9wcyA9IHNwYWNlUHJvcHNcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnNwYWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9yQ3JlYXRlU3BhY2Uoc3BhY2VQcm9wcylcbiAgICAgIGNvbnN0IHsgc3BhY2UgfSA9IHRoaXMuc3BhY2VSZXNwb25zZVxuXG4gICAgICBpZiAoIXNwYWNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzcGFjZSBmcm9tIHJlc3BvbnNlJylcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpZDogc3BhY2VJZCwgYWNjZXNzVG9rZW4sIGd1ZXN0TGluayB9ID0gc3BhY2VcblxuICAgICAgaWYgKCFzcGFjZUlkIHx8IHR5cGVvZiBzcGFjZUlkICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc3BhY2VJZCBmcm9tIHNwYWNlIHJlc3BvbnNlJylcbiAgICAgIH1cblxuICAgICAgaWYgKCFndWVzdExpbmsgfHwgdHlwZW9mIGd1ZXN0TGluayAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGd1ZXN0IGxpbmsgZnJvbSBzcGFjZSByZXNwb25zZScpXG4gICAgICB9XG5cbiAgICAgIGlmICghYWNjZXNzVG9rZW4gfHwgdHlwZW9mIGFjY2Vzc1Rva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYWNjZXNzIHRva2VuIGZyb20gc3BhY2UgcmVzcG9uc2UnKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRTcGFjZVByb3BzID0ge1xuICAgICAgICAuLi5zcGFjZVByb3BzLFxuICAgICAgICBzcGFjZVVybDogZ3Vlc3RMaW5rLFxuICAgICAgICBsb2NhbEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgYXBpVXJsOiBzcGFjZVByb3BzLmFwaVVybCxcbiAgICAgICAgd29ya2Jvb2s6IHNwYWNlUHJvcHMud29ya2Jvb2sgfHwgdGhpcy5zcGFjZVJlc3BvbnNlLndvcmtib29rcz8uWzBdLFxuICAgICAgfVxuICAgICAgdGhpcy5fc3BhY2VJbml0aWFsaXplZC5zZXQoZm9ybWF0dGVkU3BhY2VQcm9wcylcbiAgICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKVxuICAgICAgcmV0dXJuIGZvcm1hdHRlZFNwYWNlUHJvcHNcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgc3BhY2U6JywgZXJyb3IpXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIE9wZW5FbWJlZCA9IHRoaXMuc3RhcnRGbGF0ZmlsZVxuICBhc3luYyBzdGFydEZsYXRmaWxlKHNwYWNlUHJvcHM6IElTcGFjZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY3VycmVudFNwYWNlUHJvcHMgPSBzcGFjZVByb3BzXG4gICAgcmV0dXJuIHRoaXMuaW5pdFNwYWNlKHRoaXMuY3VycmVudFNwYWNlUHJvcHMpXG4gIH1cblxuICBjbG9zZUVtYmVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2xvYWRpbmcuc2V0KGZhbHNlKVxuICAgIHRoaXMuX3NwYWNlSW5pdGlhbGl6ZWQuc2V0KHVuZGVmaW5lZClcbiAgfVxufVxuIl19