mirror of
https://github.com/qlik-oss/nebula.js.git
synced 2025-12-19 17:58:43 -05:00
fix: make sure stepCycle exists before calling (#1509)
* fix: make sure checking stepCycle func exist before calling * fix: make sure stepCycle func exist before calling * fix: also check if app exist * fix: add return * fix: make sure checking stepCycle func exist before calling * fix: make sure stepCycle func exist before calling * fix: also check if app exist * fix: add return * chore: update engima and schema version * test: unit test * fix: remove engine version --------- Co-authored-by: caele <tsm@qlik.com>
This commit is contained in:
@@ -16,4 +16,4 @@
|
|||||||
"@babel/core": "7.24.0",
|
"@babel/core": "7.24.0",
|
||||||
"parcel": "^2.12.0"
|
"parcel": "^2.12.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import enigma from 'enigma.js';
|
import enigma from 'enigma.js';
|
||||||
import qixSchema from 'enigma.js/schemas/12.1657.0.json';
|
import qixSchema from 'enigma.js/schemas/12.2015.0.json';
|
||||||
|
|
||||||
import { embed } from '@nebula.js/stardust';
|
import { embed } from '@nebula.js/stardust';
|
||||||
import mekko from '@nebula.js/sn-mekko-chart';
|
import mekko from '@nebula.js/sn-mekko-chart';
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
import CyclicIcon from '@nebula.js/ui/icons/cyclic';
|
||||||
import DrillDownIcon from '@nebula.js/ui/icons/drill-down';
|
import DrillDownIcon from '@nebula.js/ui/icons/drill-down';
|
||||||
import CyclicIcon from '@nebula.js/ui/icons/reload';
|
import ReloadIcon from '@nebula.js/ui/icons/reload';
|
||||||
|
|
||||||
const dimensionTypes = {
|
const dimensionTypes = {
|
||||||
single: 'N',
|
single: 'N',
|
||||||
@@ -17,16 +18,23 @@ const createDimensionIconData = (dimInfo, app) => {
|
|||||||
};
|
};
|
||||||
case dimensionTypes.cyclic:
|
case dimensionTypes.cyclic:
|
||||||
return {
|
return {
|
||||||
icon: CyclicIcon,
|
icon: app ? ReloadIcon : CyclicIcon,
|
||||||
tooltip: 'Listbox.Cyclic',
|
tooltip: 'Listbox.Cyclic',
|
||||||
onClick: () => {
|
onClick: app
|
||||||
app
|
? () => {
|
||||||
.getDimension(dimInfo.qLibraryId)
|
app
|
||||||
.then((dimensionModel) => {
|
.getDimension(dimInfo.qLibraryId)
|
||||||
dimensionModel.stepCycle(1);
|
.then((dimensionModel) => {
|
||||||
})
|
if (!dimensionModel.stepCycle) {
|
||||||
.catch(() => null);
|
// eslint-disable-next-line no-console
|
||||||
},
|
console.log("engine api spec version doesn't have support for function stepCycle");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dimensionModel.stepCycle(1);
|
||||||
|
})
|
||||||
|
.catch(() => null);
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
};
|
};
|
||||||
default:
|
default:
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import DrillDownIcon from '@nebula.js/ui/icons/drill-down';
|
import DrillDownIcon from '@nebula.js/ui/icons/drill-down';
|
||||||
import CyclicIcon from '@nebula.js/ui/icons/reload';
|
import ReloadIcon from '@nebula.js/ui/icons/reload';
|
||||||
|
import CyclicIcon from '@nebula.js/ui/icons/cyclic';
|
||||||
import utils from '../ListBoxHeader/icon-utils';
|
import utils from '../ListBoxHeader/icon-utils';
|
||||||
|
|
||||||
describe('icon-utils', () => {
|
describe('icon-utils', () => {
|
||||||
@@ -19,14 +20,25 @@ describe('icon-utils', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return no icon data for cyclic dimension', () => {
|
it('should return icon data for cyclic dimension', () => {
|
||||||
const dimInfo = { qGrouping: 'C' };
|
const dimInfo = { qGrouping: 'C' };
|
||||||
const app = {};
|
const app = {};
|
||||||
const result = utils.createDimensionIconData(dimInfo, app);
|
const result = utils.createDimensionIconData(dimInfo, app);
|
||||||
expect(result).toMatchObject({
|
expect(result).toMatchObject({
|
||||||
icon: CyclicIcon,
|
icon: ReloadIcon,
|
||||||
tooltip: 'Listbox.Cyclic',
|
tooltip: 'Listbox.Cyclic',
|
||||||
onClick: expect.any(Function),
|
onClick: expect.any(Function),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should return non interactive icon data for cyclic dimension when there is no app', () => {
|
||||||
|
const dimInfo = { qGrouping: 'C' };
|
||||||
|
const app = undefined;
|
||||||
|
const result = utils.createDimensionIconData(dimInfo, app);
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
icon: CyclicIcon,
|
||||||
|
tooltip: 'Listbox.Cyclic',
|
||||||
|
onClick: undefined,
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import enigma from 'enigma.js';
|
import enigma from 'enigma.js';
|
||||||
import schema from 'enigma.js/schemas/12.1657.0.json';
|
import schema from 'enigma.js/schemas/12.2015.0.json';
|
||||||
import { Auth, AuthType } from '@qlik/sdk';
|
import { Auth, AuthType } from '@qlik/sdk';
|
||||||
|
|
||||||
export default class Authenticator {
|
export default class Authenticator {
|
||||||
|
|||||||
@@ -73,4 +73,4 @@
|
|||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-router-dom": "6.22.3"
|
"react-router-dom": "6.22.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as SDK from '@qlik/sdk';
|
import * as SDK from '@qlik/sdk';
|
||||||
import * as ENIGMA from 'enigma.js';
|
import * as ENIGMA from 'enigma.js';
|
||||||
import qixSchema from 'enigma.js/schemas/12.1657.0.json';
|
import qixSchema from 'enigma.js/schemas/12.2015.0.json';
|
||||||
import * as SenseUtilities from 'enigma.js/sense-utilities';
|
import * as SenseUtilities from 'enigma.js/sense-utilities';
|
||||||
import { connect, openApp, getConnectionInfo, getParams, parseEngineURL } from '../connect';
|
import { connect, openApp, getConnectionInfo, getParams, parseEngineURL } from '../connect';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import enigma from 'enigma.js';
|
import enigma from 'enigma.js';
|
||||||
import qixSchema from 'enigma.js/schemas/12.1657.0.json';
|
import qixSchema from 'enigma.js/schemas/12.2015.0.json';
|
||||||
import SenseUtilities from 'enigma.js/sense-utilities';
|
import SenseUtilities from 'enigma.js/sense-utilities';
|
||||||
import { Auth, AuthType } from '@qlik/sdk';
|
import { Auth, AuthType } from '@qlik/sdk';
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { renderHook, act } from '@testing-library/react';
|
import { renderHook, act } from '@testing-library/react';
|
||||||
import * as ENIGMA from 'enigma.js';
|
import * as ENIGMA from 'enigma.js';
|
||||||
import * as SenseUtilities from 'enigma.js/sense-utilities';
|
import * as SenseUtilities from 'enigma.js/sense-utilities';
|
||||||
import qixSchema from 'enigma.js/schemas/12.1657.0.json';
|
import qixSchema from 'enigma.js/schemas/12.2015.0.json';
|
||||||
import { useOpenApp } from '../useOpenApp';
|
import { useOpenApp } from '../useOpenApp';
|
||||||
import * as getAuthInstanceModule from '../../connect';
|
import * as getAuthInstanceModule from '../../connect';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import enigma from 'enigma.js';
|
import enigma from 'enigma.js';
|
||||||
import qixSchema from 'enigma.js/schemas/12.1657.0.json';
|
import qixSchema from 'enigma.js/schemas/12.2015.0.json';
|
||||||
import SenseUtilities from 'enigma.js/sense-utilities';
|
import SenseUtilities from 'enigma.js/sense-utilities';
|
||||||
import { getAuthInstance } from '../connect';
|
import { getAuthInstance } from '../connect';
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import enigma from 'enigma.js';
|
|||||||
|
|
||||||
export default function connect() {
|
export default function connect() {
|
||||||
const loadSchema = () =>
|
const loadSchema = () =>
|
||||||
fetch('https://unpkg.com/enigma.js/schemas/12.1657.0.json').then((response) => response.json());
|
fetch('https://unpkg.com/enigma.js/schemas/12.2015.0.json').then((response) => response.json());
|
||||||
|
|
||||||
const createConnection = () =>
|
const createConnection = () =>
|
||||||
loadSchema().then((schema) =>
|
loadSchema().then((schema) =>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import enigma from 'enigma.js';
|
|||||||
|
|
||||||
export default function connect() {
|
export default function connect() {
|
||||||
const loadSchema = () =>
|
const loadSchema = () =>
|
||||||
fetch('https://unpkg.com/enigma.js/schemas/12.1657.0.json').then((response) => response.json());
|
fetch('https://unpkg.com/enigma.js/schemas/12.2015.0.json').then((response) => response.json());
|
||||||
const localApp = '/apps/Ctrl-00.qvf';
|
const localApp = '/apps/Ctrl-00.qvf';
|
||||||
|
|
||||||
const createConnection = () =>
|
const createConnection = () =>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import enigma from 'enigma.js';
|
|||||||
|
|
||||||
export default function connect() {
|
export default function connect() {
|
||||||
const loadSchema = () =>
|
const loadSchema = () =>
|
||||||
fetch('https://unpkg.com/enigma.js/schemas/12.1657.0.json').then((response) => response.json());
|
fetch('https://unpkg.com/enigma.js/schemas/12.2015.0.json').then((response) => response.json());
|
||||||
|
|
||||||
const createConnection = () =>
|
const createConnection = () =>
|
||||||
loadSchema().then((schema) =>
|
loadSchema().then((schema) =>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
window.connect = function connect() {
|
window.connect = function connect() {
|
||||||
const loadSchema = () =>
|
const loadSchema = () =>
|
||||||
fetch('https://unpkg.com/enigma.js/schemas/12.1657.0.json').then((response) => response.json());
|
fetch('https://unpkg.com/enigma.js/schemas/12.2015.0.json').then((response) => response.json());
|
||||||
|
|
||||||
const createConnection = () =>
|
const createConnection = () =>
|
||||||
loadSchema().then((schema) =>
|
loadSchema().then((schema) =>
|
||||||
|
|||||||
@@ -107,4 +107,4 @@
|
|||||||
"apis/*",
|
"apis/*",
|
||||||
"test/component/*"
|
"test/component/*"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
15
packages/ui/icons/cyclic.js
Normal file
15
packages/ui/icons/cyclic.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import SvgIcon from './SvgIcon';
|
||||||
|
|
||||||
|
const cyclic = (props) => ({
|
||||||
|
...props,
|
||||||
|
shapes: [
|
||||||
|
{
|
||||||
|
type: 'path',
|
||||||
|
attrs: {
|
||||||
|
d: 'M 6 2 h 10 V 1 H 6 Z m 5 5 h 5 V 6 h -5 Z m 5 5 h -5 v -1 h 5 Z M 5 10 h 1 v 2.663 a 3.5 3.5 0 1 0 -2.922 0.036 l -0.406 0.914 A 4.501 4.501 0 1 1 7.329 13 H 9 v 1 H 5 Z',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
export default (props) => SvgIcon(cyclic(props));
|
||||||
|
export { cyclic };
|
||||||
Reference in New Issue
Block a user