insights-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ type InsightType = "trend" | "contributor";
3
+ type TimeGrain = "daily" | "weekly" | "monthly";
4
+ interface InsightProps {
5
+ type: InsightType;
6
+ metric: string;
7
+ dimension?: string;
8
+ timeGrain: TimeGrain;
9
+ timeRange: number;
10
+ dataResolver: (metric: string, grain: TimeGrain, fromTime: Date, toTime: Date) => Promise<any[]>;
11
+ dimensionValuesResolver?: (metric: string, dimension: string) => Promise<string[]>;
12
+ }
13
+ declare const Insight: ({ type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver }: InsightProps) => React.JSX.Element;
14
+ export default Insight;
@@ -0,0 +1 @@
1
+ export { default as Insight } from './components/Insights';
@@ -0,0 +1,103 @@
1
+ import * as React from 'react';
2
+ import { useState, useEffect } from 'react';
3
+
4
+ // Resolver output
5
+ // [
6
+ // { "fromtime": "01-01-2025", "totime": "07-01-2025", "Revenue": 123 },
7
+ // { "fromtime": "08-01-2025", "totime": "14-01-2025", "Revenue": 235 },
8
+ // ...
9
+ // ]
10
+ //geneerate data fro this
11
+ const Insight = ({ type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver }) => {
12
+ const [data, setData] = useState([]); //populate this based on the metric revenue or anything and timeLine is important
13
+ const [loading, setLoading] = useState(false);
14
+ const [error, setError] = useState(null);
15
+ const [dimensionValues, setDimensionValues] = useState([]);
16
+ //helper functions
17
+ //dimension - India,NZ and all
18
+ //timeRange -
19
+ //metric -
20
+ //grain - weekly ,
21
+ //should generate based on this
22
+ //then call dataResolcver
23
+ // dataResolver -> // {
24
+ // "fromtime": "01-01-2025",
25
+ // "totime": "01-02-2025",
26
+ // "metric": "Revenue",
27
+ // "grain": "weekly",
28
+ // "type": "Trend"
29
+ // }
30
+ const dateRangeCalculator = () => {
31
+ const toTime = new Date();
32
+ const fromTime = new Date();
33
+ //they give 30 days lets say
34
+ // fromDate(toDate - timeRange);
35
+ fromTime.setDate(toTime.getDate() - timeRange);
36
+ return { toTime, fromTime };
37
+ };
38
+ useEffect(() => {
39
+ const fetchData = async () => {
40
+ setLoading(true);
41
+ setError(null);
42
+ try {
43
+ const { toTime, fromTime } = dateRangeCalculator();
44
+ if (type === "contributor" && !dimension) {
45
+ setError("Dimension is required for contributor insight");
46
+ setLoading(false);
47
+ return;
48
+ }
49
+ if (type == 'contributor' && dimensionValuesResolver && dimension) {
50
+ const dim = await dimensionValuesResolver(metric, dimension);
51
+ setDimensionValues(dim);
52
+ }
53
+ const result = await dataResolver(metric, timeGrain, fromTime, toTime);
54
+ setData(result);
55
+ }
56
+ catch (error) {
57
+ if (error instanceof Error) {
58
+ setError(error.message);
59
+ }
60
+ else {
61
+ setError("Failed to load data!");
62
+ }
63
+ }
64
+ finally {
65
+ setLoading(false);
66
+ }
67
+ };
68
+ fetchData();
69
+ }, [type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver]);
70
+ if (loading) {
71
+ return (React.createElement("div", { style: { padding: '20px', textAlign: 'center' } },
72
+ React.createElement("p", null,
73
+ "Loading ",
74
+ metric,
75
+ " data...")));
76
+ }
77
+ if (error) {
78
+ return (React.createElement("div", { style: { padding: '20px', textAlign: 'center', color: 'red' } },
79
+ React.createElement("p", null,
80
+ "Error: ",
81
+ error)));
82
+ }
83
+ if (data.length === 0) {
84
+ return (React.createElement("div", { style: { padding: '20px', textAlign: 'center' } },
85
+ React.createElement("p", null, "No data available")));
86
+ }
87
+ return (React.createElement("div", { style: { padding: '20px' } },
88
+ React.createElement("h3", null,
89
+ metric,
90
+ " - ",
91
+ type,
92
+ " (",
93
+ timeGrain,
94
+ ")"),
95
+ React.createElement("pre", { style: { background: '#f4f4f4', padding: '10px' } }, JSON.stringify(data, null, 2)),
96
+ dimensionValues.length > 0 && (React.createElement("div", null,
97
+ React.createElement("p", null,
98
+ "Dimensions: ",
99
+ dimensionValues.join(', '))))));
100
+ };
101
+
102
+ export { Insight };
103
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/Insights.tsx"],"sourcesContent":["import * as React from \"react\"; \r\nimport { useEffect, useState } from 'react'; \r\n\r\n\r\ntype InsightType = \"trend\" | \"contributor\";\r\ntype TimeGrain = \"daily\" | \"weekly\" | \"monthly\";\r\n\r\ninterface InsightProps {\r\n type: InsightType;\r\n metric: string;\r\n dimension?: string;\r\n timeGrain: TimeGrain;\r\n timeRange: number; \r\n dataResolver: (\r\n metric: string,\r\n grain: TimeGrain,\r\n fromTime: Date,\r\n toTime: Date\r\n ) => Promise<any[]>;\r\n dimensionValuesResolver?: (\r\n metric: string,\r\n dimension: string\r\n ) => Promise<string[]>;\r\n}\r\n\r\n// Resolver output\r\n// [\r\n// { \"fromtime\": \"01-01-2025\", \"totime\": \"07-01-2025\", \"Revenue\": 123 },\r\n// { \"fromtime\": \"08-01-2025\", \"totime\": \"14-01-2025\", \"Revenue\": 235 },\r\n// ...\r\n// ]\r\n //geneerate data fro this\r\n\r\n\r\nconst Insight = ({type,\r\n metric, \r\n dimension, \r\n timeGrain, \r\n timeRange,\r\n dataResolver,\r\n dimensionValuesResolver} :InsightProps) => {\r\n\r\n\r\n const [data,setData] = useState<any[]>([]); //populate this based on the metric revenue or anything and timeLine is important \r\n const [loading , setLoading] = useState<boolean>(false); \r\n const [error , setError] = useState<string|null>(null); \r\n const [dimensionValues, setDimensionValues] = useState<string[]>([]);\r\n\r\n //helper functions\r\n\r\n\r\n //dimension - India,NZ and all \r\n //timeRange - \r\n //metric - \r\n //grain - weekly , \r\n //should generate based on this \r\n //then call dataResolcver\r\n\r\n // dataResolver -> // {\r\n// \"fromtime\": \"01-01-2025\",\r\n// \"totime\": \"01-02-2025\",\r\n// \"metric\": \"Revenue\",\r\n// \"grain\": \"weekly\",\r\n// \"type\": \"Trend\"\r\n// }\r\n\r\n const dateRangeCalculator = () => {\r\n const toTime= new Date(); \r\n const fromTime = new Date(); \r\n //they give 30 days lets say \r\n // fromDate(toDate - timeRange); \r\n fromTime.setDate(toTime.getDate() - timeRange); \r\n\r\n return {toTime,fromTime}; \r\n }\r\n\r\n \r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n setLoading(true); \r\n setError(null); \r\n try {\r\n const {toTime, fromTime} = dateRangeCalculator(); \r\n if (type === \"contributor\" && !dimension) {\r\n setError(\"Dimension is required for contributor insight\");\r\n setLoading(false);\r\n return;\r\n }\r\n if(type == 'contributor' && dimensionValuesResolver && dimension){\r\n const dim = await dimensionValuesResolver(metric,dimension); \r\n setDimensionValues(dim); \r\n }\r\n const result = await dataResolver(metric, timeGrain, fromTime, toTime);\r\n setData(result);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n setError(error.message);\r\n } else {\r\n setError(\"Failed to load data!\");\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n fetchData(); \r\n },[type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver]);\r\n\r\n\r\n if (loading) {\r\n return (\r\n <div style={{ padding: '20px', textAlign: 'center' }}>\r\n <p>Loading {metric} data...</p>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div style={{ padding: '20px', textAlign: 'center', color: 'red' }}>\r\n <p>Error: {error}</p>\r\n </div>\r\n );\r\n }\r\n if (data.length === 0) {\r\n return (\r\n <div style={{ padding: '20px', textAlign: 'center' }}>\r\n <p>No data available</p>\r\n </div>\r\n );\r\n }\r\nreturn (\r\n <div style={{ padding: '20px' }}>\r\n <h3>{metric} - {type} ({timeGrain})</h3>\r\n <pre style={{ background: '#f4f4f4', padding: '10px' }}>\r\n {JSON.stringify(data, null, 2)}\r\n </pre>\r\n {dimensionValues.length > 0 && (\r\n <div>\r\n <p>Dimensions: {dimensionValues.join(', ')}</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n\r\nexport default Insight; "],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,123 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+
22
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
23
+
24
+ // Resolver output
25
+ // [
26
+ // { "fromtime": "01-01-2025", "totime": "07-01-2025", "Revenue": 123 },
27
+ // { "fromtime": "08-01-2025", "totime": "14-01-2025", "Revenue": 235 },
28
+ // ...
29
+ // ]
30
+ //geneerate data fro this
31
+ const Insight = ({ type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver }) => {
32
+ const [data, setData] = React.useState([]); //populate this based on the metric revenue or anything and timeLine is important
33
+ const [loading, setLoading] = React.useState(false);
34
+ const [error, setError] = React.useState(null);
35
+ const [dimensionValues, setDimensionValues] = React.useState([]);
36
+ //helper functions
37
+ //dimension - India,NZ and all
38
+ //timeRange -
39
+ //metric -
40
+ //grain - weekly ,
41
+ //should generate based on this
42
+ //then call dataResolcver
43
+ // dataResolver -> // {
44
+ // "fromtime": "01-01-2025",
45
+ // "totime": "01-02-2025",
46
+ // "metric": "Revenue",
47
+ // "grain": "weekly",
48
+ // "type": "Trend"
49
+ // }
50
+ const dateRangeCalculator = () => {
51
+ const toTime = new Date();
52
+ const fromTime = new Date();
53
+ //they give 30 days lets say
54
+ // fromDate(toDate - timeRange);
55
+ fromTime.setDate(toTime.getDate() - timeRange);
56
+ return { toTime, fromTime };
57
+ };
58
+ React.useEffect(() => {
59
+ const fetchData = async () => {
60
+ setLoading(true);
61
+ setError(null);
62
+ try {
63
+ const { toTime, fromTime } = dateRangeCalculator();
64
+ if (type === "contributor" && !dimension) {
65
+ setError("Dimension is required for contributor insight");
66
+ setLoading(false);
67
+ return;
68
+ }
69
+ if (type == 'contributor' && dimensionValuesResolver && dimension) {
70
+ const dim = await dimensionValuesResolver(metric, dimension);
71
+ setDimensionValues(dim);
72
+ }
73
+ const result = await dataResolver(metric, timeGrain, fromTime, toTime);
74
+ setData(result);
75
+ }
76
+ catch (error) {
77
+ if (error instanceof Error) {
78
+ setError(error.message);
79
+ }
80
+ else {
81
+ setError("Failed to load data!");
82
+ }
83
+ }
84
+ finally {
85
+ setLoading(false);
86
+ }
87
+ };
88
+ fetchData();
89
+ }, [type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver]);
90
+ if (loading) {
91
+ return (React__namespace.createElement("div", { style: { padding: '20px', textAlign: 'center' } },
92
+ React__namespace.createElement("p", null,
93
+ "Loading ",
94
+ metric,
95
+ " data...")));
96
+ }
97
+ if (error) {
98
+ return (React__namespace.createElement("div", { style: { padding: '20px', textAlign: 'center', color: 'red' } },
99
+ React__namespace.createElement("p", null,
100
+ "Error: ",
101
+ error)));
102
+ }
103
+ if (data.length === 0) {
104
+ return (React__namespace.createElement("div", { style: { padding: '20px', textAlign: 'center' } },
105
+ React__namespace.createElement("p", null, "No data available")));
106
+ }
107
+ return (React__namespace.createElement("div", { style: { padding: '20px' } },
108
+ React__namespace.createElement("h3", null,
109
+ metric,
110
+ " - ",
111
+ type,
112
+ " (",
113
+ timeGrain,
114
+ ")"),
115
+ React__namespace.createElement("pre", { style: { background: '#f4f4f4', padding: '10px' } }, JSON.stringify(data, null, 2)),
116
+ dimensionValues.length > 0 && (React__namespace.createElement("div", null,
117
+ React__namespace.createElement("p", null,
118
+ "Dimensions: ",
119
+ dimensionValues.join(', '))))));
120
+ };
121
+
122
+ exports.Insight = Insight;
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/components/Insights.tsx"],"sourcesContent":["import * as React from \"react\"; \r\nimport { useEffect, useState } from 'react'; \r\n\r\n\r\ntype InsightType = \"trend\" | \"contributor\";\r\ntype TimeGrain = \"daily\" | \"weekly\" | \"monthly\";\r\n\r\ninterface InsightProps {\r\n type: InsightType;\r\n metric: string;\r\n dimension?: string;\r\n timeGrain: TimeGrain;\r\n timeRange: number; \r\n dataResolver: (\r\n metric: string,\r\n grain: TimeGrain,\r\n fromTime: Date,\r\n toTime: Date\r\n ) => Promise<any[]>;\r\n dimensionValuesResolver?: (\r\n metric: string,\r\n dimension: string\r\n ) => Promise<string[]>;\r\n}\r\n\r\n// Resolver output\r\n// [\r\n// { \"fromtime\": \"01-01-2025\", \"totime\": \"07-01-2025\", \"Revenue\": 123 },\r\n// { \"fromtime\": \"08-01-2025\", \"totime\": \"14-01-2025\", \"Revenue\": 235 },\r\n// ...\r\n// ]\r\n //geneerate data fro this\r\n\r\n\r\nconst Insight = ({type,\r\n metric, \r\n dimension, \r\n timeGrain, \r\n timeRange,\r\n dataResolver,\r\n dimensionValuesResolver} :InsightProps) => {\r\n\r\n\r\n const [data,setData] = useState<any[]>([]); //populate this based on the metric revenue or anything and timeLine is important \r\n const [loading , setLoading] = useState<boolean>(false); \r\n const [error , setError] = useState<string|null>(null); \r\n const [dimensionValues, setDimensionValues] = useState<string[]>([]);\r\n\r\n //helper functions\r\n\r\n\r\n //dimension - India,NZ and all \r\n //timeRange - \r\n //metric - \r\n //grain - weekly , \r\n //should generate based on this \r\n //then call dataResolcver\r\n\r\n // dataResolver -> // {\r\n// \"fromtime\": \"01-01-2025\",\r\n// \"totime\": \"01-02-2025\",\r\n// \"metric\": \"Revenue\",\r\n// \"grain\": \"weekly\",\r\n// \"type\": \"Trend\"\r\n// }\r\n\r\n const dateRangeCalculator = () => {\r\n const toTime= new Date(); \r\n const fromTime = new Date(); \r\n //they give 30 days lets say \r\n // fromDate(toDate - timeRange); \r\n fromTime.setDate(toTime.getDate() - timeRange); \r\n\r\n return {toTime,fromTime}; \r\n }\r\n\r\n \r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n setLoading(true); \r\n setError(null); \r\n try {\r\n const {toTime, fromTime} = dateRangeCalculator(); \r\n if (type === \"contributor\" && !dimension) {\r\n setError(\"Dimension is required for contributor insight\");\r\n setLoading(false);\r\n return;\r\n }\r\n if(type == 'contributor' && dimensionValuesResolver && dimension){\r\n const dim = await dimensionValuesResolver(metric,dimension); \r\n setDimensionValues(dim); \r\n }\r\n const result = await dataResolver(metric, timeGrain, fromTime, toTime);\r\n setData(result);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n setError(error.message);\r\n } else {\r\n setError(\"Failed to load data!\");\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n fetchData(); \r\n },[type, metric, dimension, timeGrain, timeRange, dataResolver, dimensionValuesResolver]);\r\n\r\n\r\n if (loading) {\r\n return (\r\n <div style={{ padding: '20px', textAlign: 'center' }}>\r\n <p>Loading {metric} data...</p>\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div style={{ padding: '20px', textAlign: 'center', color: 'red' }}>\r\n <p>Error: {error}</p>\r\n </div>\r\n );\r\n }\r\n if (data.length === 0) {\r\n return (\r\n <div style={{ padding: '20px', textAlign: 'center' }}>\r\n <p>No data available</p>\r\n </div>\r\n );\r\n }\r\nreturn (\r\n <div style={{ padding: '20px' }}>\r\n <h3>{metric} - {type} ({timeGrain})</h3>\r\n <pre style={{ background: '#f4f4f4', padding: '10px' }}>\r\n {JSON.stringify(data, null, 2)}\r\n </pre>\r\n {dimensionValues.length > 0 && (\r\n <div>\r\n <p>Dimensions: {dimensionValues.join(', ')}</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n\r\nexport default Insight; "],"names":["useState","useEffect","React"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "insights-sdk",
3
+ "version": "1.0.0",
4
+ "description": "React SDK for rendering insights",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/index.d.ts",
8
+ "type": "module",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "rollup -c"
14
+ },
15
+ "keywords": ["react", "insights", "sdk"],
16
+ "author": "",
17
+ "license": "ISC",
18
+ "peerDependencies": {
19
+ "react": "^18.0.0 || ^19.0.0",
20
+ "react-dom": "^18.0.0 || ^19.0.0"
21
+ },
22
+ "dependencies": {
23
+ "recharts": "^2.5.0"
24
+ },
25
+ "devDependencies": {
26
+ "@rollup/plugin-commonjs": "^29.0.0",
27
+ "@rollup/plugin-node-resolve": "^16.0.3",
28
+ "@rollup/plugin-typescript": "^12.3.0",
29
+ "@types/react": "^19.2.8",
30
+ "react": "^19.2.3",
31
+ "react-dom": "^19.2.3",
32
+ "rollup": "^4.55.1",
33
+ "rollup-plugin-peer-deps-external": "^2.2.4",
34
+ "tslib": "^2.8.1",
35
+ "typescript": "^5.0.0"
36
+ }
37
+ }