Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
3d4b215
SK-1233 config embedded in URL for reveal-iframes
skyflow-sapanreddy Nov 15, 2023
eaa9eb0
SK-1233 config embedded URL for collect-containers
skyflow-sapanreddy Nov 20, 2023
208b118
SK-1233 Test fix on reveal-frame
skyflow-sapanreddy Nov 23, 2023
c0846e7
SK-1233 chore Merge branch 'master' into SK-1233
skyflow-sapanreddy Dec 8, 2023
c3ca9e4
SK-1233 Test update and safe catching url
skyflow-sapanreddy Dec 11, 2023
c53bbc4
SK-1233 Test update
skyflow-sapanreddy Dec 13, 2023
a419272
SK-1263 Update README & Samples
skyflow-vivek Dec 1, 2023
c026113
SK-1238 Update element props for Collect and Reveal Elements
skyflow-vivek Nov 30, 2023
7b12eee
SK-1238 Ability to update skyflow elements' properties dynamically
skyflow-vivek Dec 11, 2023
dc0ae0b
SK-1238 Update element props dynamically
skyflow-vivek Dec 12, 2023
103ed28
[AUTOMATED] Private Release 1.33.4-dev.7ab9da9
skyflow-vivek Dec 12, 2023
cfde971
SK-1258 fix invalid input styles when custom validations are applied …
appasuamithsai Dec 5, 2023
5609e2e
[AUTOMATED] Private Release 1.33.4-dev.71819a5
yaswanth-pula-skyflow Dec 12, 2023
30ece22
SK-1238 Ability to update element props dynamically
skyflow-vivek Dec 13, 2023
e778c85
[AUTOMATED] Private Release 1.33.4-dev.04bbcfc
skyflow-vivek Dec 13, 2023
2bf321c
SK-1138 iframe height resize (#357)
skyflow-bharti Dec 13, 2023
f7cf33b
[AUTOMATED] Private Release 1.33.4-dev.390d2fc
skyflow-bharti Dec 13, 2023
cdf9bf7
[AUTOMATED] Public Release - 1.34.0
yaswanth-pula-skyflow Dec 14, 2023
5c94109
SK-1263 README, CHANGELOG & Samples for update element props
skyflow-vivek Dec 15, 2023
032765b
SK-1263 Addresed comments on README
skyflow-vivek Dec 15, 2023
9f09ed3
Release/24.1.1 (#378)
skyflow-bharti Jan 10, 2024
b41e38b
[AUTOMATED] Public Release - 1.34.1
skyflow-bharti Jan 10, 2024
cfb14c1
SK-1395 : Update tokenize function to use DOM traversal
skyflow-shashank-prajapati Jan 16, 2024
765e7b6
SK-1395 : interface import fix
skyflow-shashank-prajapati Jan 16, 2024
6382b6d
SK-1409 : Update tokenize function to remove dependency from iFrameFo…
skyflow-shashank-prajapati Jan 18, 2024
e1e3865
SK-1409: Pass element names to tokenize function as a parameter
skyflow-shashank-prajapati Jan 18, 2024
1aa3dcd
SK-1409: Fixed jest test cases
skyflow-shashank-prajapati Jan 19, 2024
c9dcbdd
SK-1395 : Test Cases update
skyflow-shashank-prajapati Jan 22, 2024
e0d95ad
SK-1395 : Test Cases update
skyflow-shashank-prajapati Jan 22, 2024
c327d2a
SK-1409 : Coverage fixed
skyflow-shashank-prajapati Jan 22, 2024
bc22221
Merge branch 'master' of github.com:skyflowapi/skyflow-js into SK-139…
skyflow-shashank-prajapati Jan 23, 2024
8624fa5
SK-1395: Test cases fixed
skyflow-shashank-prajapati Jan 23, 2024
23232ce
SK-1395 : Test cases coverage increased
skyflow-shashank-prajapati Jan 23, 2024
dabcb0b
SK-1395 : coverage update
skyflow-shashank-prajapati Jan 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/core/external/collect/collect-container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ class CollectContainer extends Container {
try {
validateInitConfig(this.#metaData.clientJSON.config);
const collectElements = Object.values(this.#elements);
const elementIds = Object.keys(this.#elements)
.map((element) => ({ frameId: element, elementId: element }));
collectElements.forEach((element) => {
if (!element.isMounted()) {
throw new SkyflowError(SKYFLOW_ERROR_CODE.ELEMENTS_NOT_MOUNTED, [], true);
Expand All @@ -292,6 +294,7 @@ class CollectContainer extends Container {
{
...options,
tokens: options?.tokens !== undefined ? options.tokens : true,
elementIds,
},
(data: any) => {
if (!data || data?.error) {
Expand Down
12 changes: 9 additions & 3 deletions src/core/external/collect/collect-element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,17 +208,23 @@ class CollectElement extends SkyflowElement {

const isComposable = this.#elements.length > 1;
if (isComposable) {
this.#iframe.mount(domElement);
this.#iframe.mount(domElement, {
record: JSON.stringify({ record: this.#group }),
});
this.#bus.on(ELEMENT_EVENTS_TO_IFRAME.FRAME_READY + this.containerId, sub);
} else {
if (this.#readyToMount) {
this.#iframe.mount(domElement);
this.#iframe.mount(domElement, {
record: JSON.stringify({ record: this.#group }),
});
this.#bus.on(ELEMENT_EVENTS_TO_IFRAME.FRAME_READY + this.containerId, sub);
return;
}
this.#groupEmitter?.on(ELEMENT_EVENTS_TO_CONTAINER.COLLECT_CONTAINER_MOUNTED, (data) => {
if (data?.containerId === this.containerId) {
this.#iframe.mount(domElement);
this.#iframe.mount(domElement, {
record: JSON.stringify({ record: this.#group }),
});
this.#bus.on(ELEMENT_EVENTS_TO_IFRAME.FRAME_READY + this.containerId, sub);
}
});
Expand Down
9 changes: 8 additions & 1 deletion src/core/external/collect/compose-collect-container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ class ComposableContainer extends Container {
throw new SkyflowError(SKYFLOW_ERROR_CODE.ELEMENTS_NOT_MOUNTED, [], true);
}
});

const elementIds:{ frameId:string, elementId:string }[] = [];
const collectElements = Object.values(this.#elements);
collectElements.forEach((element) => {
element.isValidElement();
Expand All @@ -368,13 +368,20 @@ class ComposableContainer extends Container {
if (options?.upsert) {
validateUpsertOptions(options?.upsert);
}
this.#elementsList.forEach((element) => {
elementIds.push({
frameId: this.#tempElements.elementName,
elementId: element.elementName,
});
});
bus
// .target(properties.IFRAME_SECURE_ORGIN)
.emit(
ELEMENT_EVENTS_TO_IFRAME.TOKENIZATION_REQUEST + this.#containerId,
{
...options,
tokens: options?.tokens !== undefined ? options.tokens : true,
elementIds,
},
(data: any) => {
if (!data || data?.error) {
Expand Down
4 changes: 2 additions & 2 deletions src/core/external/common/iframe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export default class IFrame {
setAttributes(this.iframe, { src: responseValue });
};

mount = (domElement) => {
mount = (domElement, data?:any) => {
this.unmount();
try {
if (typeof domElement === 'string') {
Expand All @@ -46,7 +46,7 @@ export default class IFrame {
// throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_ELEMENT_SELECTOR, [], true);
}

setAttributes(this.iframe, { src: getIframeSrc() });
setAttributes(this.iframe, { src: `${getIframeSrc()}${data ? `?${btoa(data?.record)}` : ''}` });

this.container?.appendChild(this.iframe);
};
Expand Down
16 changes: 14 additions & 2 deletions src/core/external/reveal/reveal-element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,15 +127,27 @@ class RevealElement extends SkyflowElement {
};

if (this.#readyToMount) {
this.#iframe.mount(domElementSelector);
this.#iframe.mount(domElementSelector, {
record: JSON.stringify({
...this.#metaData,
record: this.#recordData,
context: this.#context,
}),
});
bus
.target(properties.IFRAME_SECURE_ORGIN)
.on(ELEMENT_EVENTS_TO_IFRAME.REVEAL_FRAME_READY, sub);
return;
}
this.#eventEmitter?.on(ELEMENT_EVENTS_TO_CONTAINER.REVEAL_CONTAINER_MOUNTED, (data) => {
if (data?.containerId === this.#containerId) {
this.#iframe.mount(domElementSelector);
this.#iframe.mount(domElementSelector, {
record: JSON.stringify({
...this.#metaData,
record: this.#recordData,
context: this.#context,
}),
});
bus
.target(properties.IFRAME_SECURE_ORGIN)
.on(ELEMENT_EVENTS_TO_IFRAME.REVEAL_FRAME_READY, sub);
Expand Down
18 changes: 11 additions & 7 deletions src/core/internal/frame-elements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,22 @@ export default class FrameElements {
bus.emit(
ELEMENT_EVENTS_TO_IFRAME.FRAME_READY + names[3],
{ name: window.name },
(group: any) => {
() => {
printLog(parameterizedString(logs.infoLogs.COLLECT_FRAME_READY_CB,
CLASS_NAME, getElementName(window.name)), MessageType.LOG,
logLevel);
FrameElements.group = group;
if (FrameElements.frameElements) {
printLog(parameterizedString(logs.infoLogs.SETUP_IN_START, CLASS_NAME),
MessageType.LOG, logLevel);
FrameElements.frameElements.setup(); // start the process
}
},
);
const url = window.location?.href;
const configIndex = url.indexOf('?');
const encodedString = configIndex !== -1 ? decodeURIComponent(url.substring(configIndex + 1)) : '';
const parsedRecord = encodedString ? JSON.parse(atob(encodedString)) : {};
FrameElements.group = parsedRecord?.record;
if (FrameElements.frameElements) {
printLog(parameterizedString(logs.infoLogs.SETUP_IN_START, CLASS_NAME),
MessageType.LOG, logLevel);
FrameElements.frameElements.setup(); // start the process
}
};

// called by IFrameForm
Expand Down
147 changes: 77 additions & 70 deletions src/core/internal/iframe-form/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -945,25 +945,27 @@ export class IFrameForm {
if (!this.client) throw new SkyflowError(SKYFLOW_ERROR_CODE.CLIENT_CONNECTION, [], true);
const insertResponseObject: any = {};
const updateResponseObject: any = {};
const formElements = Object.keys(this.iFrameFormElements);
let errorMessage = '';
for (let i = 0; i < formElements.length; i += 1) {
if (
this.iFrameFormElements[formElements[i]].fieldType
!== ELEMENTS.FILE_INPUT.name
) {
const {
state, doesClientHasError, clientErrorText, errorText, onFocusChange,
} = this.iFrameFormElements[formElements[i]];

if (state.isRequired || !state.isValid) {
onFocusChange(false);
}

if (!state.isValid || !state.isComplete) {
if (doesClientHasError) {
errorMessage += `${state.name}:${clientErrorText}`;
} else { errorMessage += `${state.name}:${errorText} `; }
for (let i = 0; i < options.elementIds.length; i += 1) {
const Frame = window.parent.frames[`${options.elementIds[i].frameId}:${this.controllerId}:${this.logLevel}`];
const inputElement = Frame.document
.getElementById(options.elementIds[i].elementId);
if (inputElement) {
if (
inputElement.iFrameFormElement.fieldType
!== ELEMENTS.FILE_INPUT.name
) {
const {
state, doesClientHasError, clientErrorText, errorText, onFocusChange,
} = inputElement.iFrameFormElement;
if (state.isRequired || !state.isValid) {
onFocusChange(false);
}
if (!state.isValid || !state.isComplete) {
if (doesClientHasError) {
errorMessage += `${state.name}:${clientErrorText}`;
} else { errorMessage += `${state.name}:${errorText} `; }
}
}
}
}
Expand All @@ -972,68 +974,73 @@ export class IFrameForm {
return Promise.reject(new SkyflowError(SKYFLOW_ERROR_CODE.COMPLETE_AND_VALID_INPUTS, [`${errorMessage}`], true));
}

for (let i = 0; i < formElements.length; i += 1) {
const {
state, tableName, validations, skyflowID,
} = this.iFrameFormElements[formElements[i]];
if (tableName) {
if (
this.iFrameFormElements[formElements[i]].fieldType
!== ELEMENTS.FILE_INPUT.name
) {
for (let i = 0; i < options.elementIds.length; i += 1) {
const Frame = window.parent.frames[`${options.elementIds[i].frameId}:${this.controllerId}:${this.logLevel}`];
const inputElement = Frame.document
.getElementById(options.elementIds[i].elementId);
if (inputElement) {
const {
state, tableName, validations, skyflowID,
} = inputElement.iFrameFormElement;
if (tableName) {
if (
this.iFrameFormElements[formElements[i]].fieldType
=== ELEMENTS.checkbox.name
inputElement.iFrameFormElement.fieldType
!== ELEMENTS.FILE_INPUT.name
) {
if (insertResponseObject[state.name]) {
insertResponseObject[state.name] = `${insertResponseObject[state.name]},${state.value
}`;
} else {
insertResponseObject[state.name] = state.value;
}
} else if (insertResponseObject[tableName] && !(skyflowID === '') && skyflowID === undefined) {
if (get(insertResponseObject[tableName], state.name)
if (
inputElement.iFrameFormElement.fieldType
=== ELEMENTS.checkbox.name
) {
if (insertResponseObject[state.name]) {
insertResponseObject[state.name] = `${insertResponseObject[state.name]},${state.value
}`;
} else {
insertResponseObject[state.name] = state.value;
}
} else if (insertResponseObject[tableName] && !(skyflowID === '') && skyflowID === undefined) {
if (get(insertResponseObject[tableName], state.name)
&& !(validations && checkForElementMatchRule(validations))) {
return Promise.reject(new SkyflowError(SKYFLOW_ERROR_CODE.DUPLICATE_ELEMENT,
[state.name, tableName], true));
}
set(
insertResponseObject[tableName],
state.name,
this.iFrameFormElements[formElements[i]].getUnformattedValue(),
);
} else if (skyflowID || skyflowID === '') {
if (skyflowID === '' || skyflowID === null) {
return Promise.reject(new SkyflowError(
SKYFLOW_ERROR_CODE.EMPTY_SKYFLOW_ID_IN_ADDITIONAL_FIELDS,
));
}
if (updateResponseObject[skyflowID]) {
return Promise.reject(new SkyflowError(SKYFLOW_ERROR_CODE.DUPLICATE_ELEMENT,
[state.name, tableName], true));
}
set(
updateResponseObject[skyflowID],
insertResponseObject[tableName],
state.name,
this.iFrameFormElements[formElements[i]].getUnformattedValue(),
inputElement.iFrameFormElement.getUnformattedValue(),
);
} else if (skyflowID || skyflowID === '') {
if (skyflowID === '' || skyflowID === null) {
return Promise.reject(new SkyflowError(
SKYFLOW_ERROR_CODE.EMPTY_SKYFLOW_ID_IN_ADDITIONAL_FIELDS,
));
}
if (updateResponseObject[skyflowID]) {
set(
updateResponseObject[skyflowID],
state.name,
inputElement.iFrameFormElement.getUnformattedValue(),
);
} else {
updateResponseObject[skyflowID] = {};
set(
updateResponseObject[skyflowID],
state.name,
inputElement.iFrameFormElement.getUnformattedValue(),
);
set(
updateResponseObject[skyflowID],
'table',
tableName,
);
}
} else {
updateResponseObject[skyflowID] = {};
insertResponseObject[tableName] = {};
set(
updateResponseObject[skyflowID],
insertResponseObject[tableName],
state.name,
this.iFrameFormElements[formElements[i]].getUnformattedValue(),
);
set(
updateResponseObject[skyflowID],
'table',
tableName,
inputElement.iFrameFormElement.getUnformattedValue(),
);
}
} else {
insertResponseObject[tableName] = {};
set(
insertResponseObject[tableName],
state.name,
this.iFrameFormElements[formElements[i]].getUnformattedValue(),
);
}
}
}
Expand Down Expand Up @@ -1180,7 +1187,7 @@ export class IFrameForm {

try {
if (
frame.location.href === window.location.href
frame.location.href.split('?')[0] === window.location.href
&& frame.name === frameGlobalName
) {
frameInstance = frame;
Expand Down
6 changes: 4 additions & 2 deletions src/core/internal/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ export class FrameElement {

private domLabel?: HTMLLabelElement;

private domInput?: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLFormElement;
private domInput?: (HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLFormElement)
& { iFrameFormElement? : IFrameFormElement };

public domError?: HTMLSpanElement;

Expand Down Expand Up @@ -153,7 +154,7 @@ export class FrameElement {

this.domError = document.createElement('span');

let type;
let type:'select' | 'textarea' | 'input' = 'input';
if (this.iFrameFormElement?.fieldType === ELEMENTS.dropdown.name) {
type = 'select';
} else if (this.iFrameFormElement?.fieldType === ELEMENTS.textarea.name) {
Expand All @@ -167,6 +168,7 @@ export class FrameElement {

const inputElement = document.createElement(type);
this.domInput = inputElement;
this.domInput.iFrameFormElement = this.iFrameFormElement;
inputElement.setAttribute(CUSTOM_ROW_ID_ATTRIBUTE, this.htmlDivElement?.id?.split(':')[0] || '');
this.inputParent.append(inputElement);

Expand Down
9 changes: 6 additions & 3 deletions src/core/internal/reveal/reveal-frame.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,13 @@ class RevealFrame {
.emit(
ELEMENT_EVENTS_TO_IFRAME.REVEAL_FRAME_READY,
{ name: window.name },
(data: any) => {
RevealFrame.revealFrame = new RevealFrame(data.record, data.context);
},
() => {},
);
const url = window.location?.href;
const configIndex = url.indexOf('?');
const encodedString = configIndex !== -1 ? decodeURIComponent(url.substring(configIndex + 1)) : '';
const parsedRecord = encodedString ? JSON.parse(atob(encodedString)) : {};
RevealFrame.revealFrame = new RevealFrame(parsedRecord.record, parsedRecord.context);
}

constructor(record, context) {
Expand Down
Loading