@corbe30/fortune-excel 1.2.5 → 2.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.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  <img align="center" src="fortuneExcelLogo.png" width="150px" height="150px" />
3
3
  </p>
4
4
  <h1 align="center">FortuneExcel</h1>
5
- <p align="center">FortuneExcel is an .xlsx import/export plugin for FortuneSheet.</p>
5
+ <p align="center">FortuneExcel is an .xlsx and .csv import/export plugin for FortuneSheet / ProsperaSheet.</p>
6
6
 
7
7
  <div align="center">
8
8
 
@@ -16,34 +16,42 @@
16
16
 
17
17
  ## Usage
18
18
 
19
- For best results, import and export a single sheet at a time. Although you can force FortuneExcel to handle multiple sheets, certain configurations may break.
19
+ You can check the example in [Storybook](https://github.com/Corbe30/FortuneExcel/blob/main/src/stories/Page.tsx).
20
20
 
21
21
  1. Install the package:
22
- ```js
23
- npm i @corbe30/fortune-excel
24
- ```
22
+ ```js
23
+ npm i @corbe30/fortune-excel
24
+ ```
25
25
 
26
26
  2. Add import/export toolbar item in fortune-sheet
27
- > `<ImportHelper />` is a hidden component and only required when using `importToolBarItem()`.
28
- ```js
29
- import { ImportHelper, importToolBarItem, exportToolBarItem } from "@corbe30/fortune-excel";
30
-
31
- function App() {
32
- const workbookRef = useRef();
33
- const [key, setKey] = useState(0);
34
- const [sheets, setSheets] = useState(data);
35
-
36
- return (
37
- <>
38
- <ImportHelper setKey={setKey} setSheets={setSheets} sheetRef={workbookRef} />
39
- <Workbook
40
- key={key} data={sheets} ref={workbookRef}
41
- customToolbarItems={[exportToolBarItem(workbookRef), importToolBarItem()]}
42
- />
43
- </>
44
- );
45
- }
46
- ```
27
+ > `<FortuneExcelHelper />` is a hidden component.
28
+ ```js
29
+ import { FortuneExcelHelper, importToolBarItem, exportToolBarItem } from "@corbe30/fortune-excel";
30
+
31
+ function App() {
32
+ const workbookRef = useRef();
33
+ const [key, setKey] = useState(0);
34
+ const [sheets, setSheets] = useState(data);
35
+
36
+ return (
37
+ <>
38
+ <FortuneExcelHelper
39
+ setKey={setKey}
40
+ setSheets={setSheets}
41
+ sheetRef={sheetRef}
42
+ config={{
43
+ import: { xlsx: true, csv: true },
44
+ export: { xlsx: true, csv: true },
45
+ }}
46
+ />
47
+ <Workbook
48
+ key={key} data={sheets} ref={workbookRef}
49
+ customToolbarItems={[importToolBarItem(), exportToolBarItem(workbookRef)]}
50
+ />
51
+ </>
52
+ );
53
+ }
54
+ ```
47
55
 
48
56
  ## Authors and acknowledgment
49
57
 
@@ -60,11 +68,10 @@ Export support:
60
68
  - [Orleans9](https://blog.csdn.net/zinchliang) - [article](https://blog.csdn.net/zinchliang/article/details/120262185)
61
69
 
62
70
  ## Contribution
63
- 1. node v20.17.0
64
- 2. Use npm and not yarn
65
- 3. npm run prepare
66
- 4. npm run build-storybook
67
- 5. npm run storybook
71
+ 1. Install node v20.17.0
72
+ 3. `npm run prepare`
73
+ 4. `npm run build-storybook`
74
+ 5. `npm run storybook`
68
75
 
69
76
  ## License
70
77
 
@@ -1 +1,2 @@
1
- export declare function exportSheetExcel(luckysheetRef: any): Promise<void>;
1
+ import { IFileType } from "../common/ICommon";
2
+ export declare function exportSheetExcel(luckysheetRef: any, fileType: IFileType): Promise<void>;
@@ -71,9 +71,10 @@ var ExcelImage_1 = require("./ExcelImage");
71
71
  var ExcelBorder_1 = require("./ExcelBorder");
72
72
  var ExcelValidation_1 = require("./ExcelValidation");
73
73
  var ExcelConfig_1 = require("./ExcelConfig");
74
- function exportSheetExcel(luckysheetRef) {
74
+ var ICommon_1 = require("../common/ICommon");
75
+ function exportSheetExcel(luckysheetRef, fileType) {
75
76
  return __awaiter(this, void 0, void 0, function () {
76
- var luckysheet, workbook, buffer, fileData;
77
+ var luckysheet, workbook, fileData, buffer, buffer;
77
78
  return __generator(this, function (_a) {
78
79
  switch (_a.label) {
79
80
  case 0:
@@ -92,11 +93,19 @@ function exportSheetExcel(luckysheetRef) {
92
93
  (0, ExcelConfig_1.setHiddenRowCol)(table, worksheet);
93
94
  return true;
94
95
  });
95
- return [4 /*yield*/, workbook.xlsx.writeBuffer()];
96
+ if (!(fileType === ICommon_1.IFileType.CSV)) return [3 /*break*/, 2];
97
+ return [4 /*yield*/, workbook.csv.writeBuffer()];
96
98
  case 1:
97
99
  buffer = _a.sent();
98
100
  fileData = new Blob([buffer]);
99
- fileSaver.saveAs(fileData, "".concat(luckysheetRef.getSheet().name, ".xlsx"));
101
+ return [3 /*break*/, 4];
102
+ case 2: return [4 /*yield*/, workbook.xlsx.writeBuffer()];
103
+ case 3:
104
+ buffer = _a.sent();
105
+ fileData = new Blob([buffer]);
106
+ _a.label = 4;
107
+ case 4:
108
+ fileSaver.saveAs(fileData, "".concat(luckysheetRef.getSheet().name, ".").concat(fileType));
100
109
  return [2 /*return*/];
101
110
  }
102
111
  });
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import "./style.css";
3
+ export declare const ExportHelper: (props: any) => React.JSX.Element;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ExportHelper = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ require("./style.css");
9
+ var Transform_1 = require("../common/Transform");
10
+ var ICommon_1 = require("../common/ICommon");
11
+ var getExportButton = function (fileType, onClick) {
12
+ return (react_1.default.createElement("button", { className: "unstyled-button", onClick: function () { return onClick(fileType); } },
13
+ "Export as .",
14
+ fileType.toLowerCase()));
15
+ };
16
+ var ExportHelper = function (props) {
17
+ var sheetRef = props.sheetRef, config = props.config;
18
+ var onMouseLeave = function () {
19
+ var exportHelper = document.querySelector(".export-helper");
20
+ exportHelper.style.visibility = "hidden";
21
+ };
22
+ var onClick = function (fileType) {
23
+ (0, Transform_1.transformFortuneToExcel)(sheetRef.current, fileType);
24
+ onMouseLeave();
25
+ };
26
+ return (react_1.default.createElement("div", { className: "export-helper", onMouseLeave: onMouseLeave },
27
+ config.xlsx ? getExportButton(ICommon_1.IFileType.XLSX, onClick) : null,
28
+ config.csv ? getExportButton(ICommon_1.IFileType.CSV, onClick) : null));
29
+ };
30
+ exports.ExportHelper = ExportHelper;
@@ -43,8 +43,9 @@ exports.ImportHelper = void 0;
43
43
  var react_1 = __importDefault(require("react"));
44
44
  var Transform_1 = require("../common/Transform");
45
45
  var ImportHelper = function (props) {
46
- var setSheets = props.setSheets, setKey = props.setKey, sheetRef = props.sheetRef;
47
- return (react_1.default.createElement("input", { type: "file", id: "ImportHelper", accept: ".xlsx", onChange: function (e) { return __awaiter(void 0, void 0, void 0, function () {
46
+ var setSheets = props.setSheets, setKey = props.setKey, sheetRef = props.sheetRef, config = props.config;
47
+ var acceptTypes = "".concat(config.xlsx ? ".xlsx," : "").concat(config.csv ? ".csv" : "");
48
+ return (react_1.default.createElement("input", { type: "file", id: "ImportHelper", accept: acceptTypes, onChange: function (e) { return __awaiter(void 0, void 0, void 0, function () {
48
49
  return __generator(this, function (_a) {
49
50
  switch (_a.label) {
50
51
  case 0: return [4 /*yield*/, (0, Transform_1.transformExcelToFortune)(e, setSheets, setKey, sheetRef)];
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const FortuneExcelHelper: (props: any) => React.JSX.Element;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FortuneExcelHelper = void 0;
18
+ var react_1 = __importDefault(require("react"));
19
+ var ImportHelper_1 = require("../ToFortuneSheet/ImportHelper");
20
+ var ExportHelper_1 = require("../ToExcel/ExportHelper");
21
+ var formatConfig = function (config) {
22
+ if (config === void 0) { config = {}; }
23
+ var defaultConfig = {
24
+ import: { xlsx: true, csv: true },
25
+ export: { xlsx: true, csv: true },
26
+ };
27
+ return __assign(__assign({}, defaultConfig), config);
28
+ };
29
+ var FortuneExcelHelper = function (props) {
30
+ var setKey = props.setKey, setSheets = props.setSheets, sheetRef = props.sheetRef, config = props.config;
31
+ var sanitizedConfig = formatConfig(config);
32
+ return (react_1.default.createElement(react_1.default.Fragment, null,
33
+ react_1.default.createElement(ImportHelper_1.ImportHelper, { setKey: setKey, setSheets: setSheets, sheetRef: sheetRef, config: sanitizedConfig.import }),
34
+ react_1.default.createElement(ExportHelper_1.ExportHelper, { sheetRef: sheetRef, config: sanitizedConfig.export })));
35
+ };
36
+ exports.FortuneExcelHelper = FortuneExcelHelper;
@@ -32,3 +32,7 @@ export interface IBorderInfo {
32
32
  export interface IBorderInfoCompute {
33
33
  [key: string]: IBorderInfo;
34
34
  }
35
+ export declare enum IFileType {
36
+ CSV = "csv",
37
+ XLSX = "xlsx"
38
+ }
@@ -1,2 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IFileType = void 0;
4
+ var IFileType;
5
+ (function (IFileType) {
6
+ IFileType["CSV"] = "csv";
7
+ IFileType["XLSX"] = "xlsx";
8
+ })(IFileType || (exports.IFileType = IFileType = {}));
@@ -1,13 +1,13 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  export declare const exportToolBarItem: (sheetRef: any) => {
3
3
  key: string;
4
4
  tooltip: string;
5
- icon: import("react").JSX.Element;
5
+ icon: React.JSX.Element;
6
6
  onClick: (e: any) => Promise<void>;
7
7
  };
8
8
  export declare const importToolBarItem: () => {
9
9
  key: string;
10
10
  tooltip: string;
11
- icon: import("react").JSX.Element;
11
+ icon: React.JSX.Element;
12
12
  onClick: (e: any) => void;
13
13
  };
@@ -42,20 +42,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.importToolBarItem = exports.exportToolBarItem = void 0;
43
43
  var ExportIcon_1 = __importDefault(require("../icons/ExportIcon"));
44
44
  var ImportIcon_1 = __importDefault(require("../icons/ImportIcon"));
45
- var Transform_1 = require("./Transform");
46
45
  var exportToolBarItem = function (sheetRef) {
47
46
  return {
48
47
  key: "export",
49
- tooltip: "Export .xlsx",
48
+ tooltip: "Export ...",
50
49
  icon: (0, ExportIcon_1.default)(),
51
50
  onClick: function (e) { return __awaiter(void 0, void 0, void 0, function () {
51
+ var exportHelper, visibility;
52
52
  return __generator(this, function (_a) {
53
- switch (_a.label) {
54
- case 0: return [4 /*yield*/, (0, Transform_1.transformFortuneToExcel)(sheetRef.current)];
55
- case 1:
56
- _a.sent();
57
- return [2 /*return*/];
58
- }
53
+ exportHelper = document.querySelector(".export-helper");
54
+ visibility = exportHelper === null || exportHelper === void 0 ? void 0 : exportHelper.style.visibility;
55
+ exportHelper.style.visibility = visibility === "visible" ? "hidden" : "visible";
56
+ return [2 /*return*/];
59
57
  });
60
58
  }); },
61
59
  };
@@ -64,7 +62,7 @@ exports.exportToolBarItem = exportToolBarItem;
64
62
  var importToolBarItem = function () {
65
63
  return {
66
64
  key: "import",
67
- tooltip: "Import .xlsx",
65
+ tooltip: "Import file",
68
66
  icon: (0, ImportIcon_1.default)(),
69
67
  onClick: function (e) {
70
68
  var _a;
@@ -1,2 +1,3 @@
1
+ import { IFileType } from "./ICommon";
1
2
  export declare const transformExcelToFortune: (e: any, setSheets: any, setKey: any, sheetRef: any) => Promise<void>;
2
- export declare const transformFortuneToExcel: (luckysheetRef: any) => Promise<void>;
3
+ export declare const transformFortuneToExcel: (luckysheetRef: any, fileType: IFileType) => Promise<void>;
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -40,17 +63,50 @@ exports.transformFortuneToExcel = exports.transformExcelToFortune = void 0;
40
63
  var FortuneFile_1 = require("../ToFortuneSheet/FortuneFile");
41
64
  var HandleZip_1 = require("../ToFortuneSheet/HandleZip");
42
65
  var ExcelFile_1 = require("../ToExcel/ExcelFile");
66
+ var ExcelJS = __importStar(require("exceljs"));
67
+ var convertCsvToExcel = function (file) { return __awaiter(void 0, void 0, void 0, function () {
68
+ var csvText, rows, workbook, worksheet, buffer;
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0: return [4 /*yield*/, file.text()];
72
+ case 1:
73
+ csvText = _a.sent();
74
+ rows = csvText.split("\n").map(function (row) { return row.split(","); });
75
+ workbook = new ExcelJS.Workbook();
76
+ worksheet = workbook.addWorksheet("Sheet1");
77
+ rows.forEach(function (row) {
78
+ worksheet.addRow(row);
79
+ });
80
+ return [4 /*yield*/, workbook.xlsx.writeBuffer()];
81
+ case 2:
82
+ buffer = _a.sent();
83
+ return [2 /*return*/, buffer];
84
+ }
85
+ });
86
+ }); };
43
87
  var transformExcelToFortune = function (e, setSheets, setKey, sheetRef) { return __awaiter(void 0, void 0, void 0, function () {
44
- var excelFile, files, fortuneFile, lsh;
88
+ var file, excelFile, fileName, files, fortuneFile, lsh;
45
89
  return __generator(this, function (_a) {
46
90
  switch (_a.label) {
47
- case 0: return [4 /*yield*/, e.target.files[0].arrayBuffer()];
91
+ case 0:
92
+ file = e.target.files[0];
93
+ fileName = file.name;
94
+ if (!(file.type === 'text/csv' || file.name.toLowerCase().endsWith('.csv'))) return [3 /*break*/, 2];
95
+ return [4 /*yield*/, convertCsvToExcel(file)];
48
96
  case 1:
97
+ // convert CSV to xlsx
49
98
  excelFile = _a.sent();
50
- return [4 /*yield*/, new HandleZip_1.HandleZip(excelFile).unzipFile()];
51
- case 2:
99
+ fileName = file.name.replace(/\.csv$/i, '.xlsx');
100
+ return [3 /*break*/, 4];
101
+ case 2: return [4 /*yield*/, file.arrayBuffer()];
102
+ case 3:
103
+ // process as excel file
104
+ excelFile = _a.sent();
105
+ _a.label = 4;
106
+ case 4: return [4 /*yield*/, new HandleZip_1.HandleZip(new File([excelFile], fileName)).unzipFile()];
107
+ case 5:
52
108
  files = _a.sent();
53
- fortuneFile = new FortuneFile_1.FortuneFile(files, excelFile.name);
109
+ fortuneFile = new FortuneFile_1.FortuneFile(files, fileName);
54
110
  fortuneFile.Parse();
55
111
  lsh = fortuneFile.serialize();
56
112
  setSheets(lsh.sheets);
@@ -69,10 +125,10 @@ var transformExcelToFortune = function (e, setSheets, setKey, sheetRef) { return
69
125
  });
70
126
  }); };
71
127
  exports.transformExcelToFortune = transformExcelToFortune;
72
- var transformFortuneToExcel = function (luckysheetRef) { return __awaiter(void 0, void 0, void 0, function () {
128
+ var transformFortuneToExcel = function (luckysheetRef, fileType) { return __awaiter(void 0, void 0, void 0, function () {
73
129
  return __generator(this, function (_a) {
74
130
  switch (_a.label) {
75
- case 0: return [4 /*yield*/, (0, ExcelFile_1.exportSheetExcel)(luckysheetRef)];
131
+ case 0: return [4 /*yield*/, (0, ExcelFile_1.exportSheetExcel)(luckysheetRef, fileType)];
76
132
  case 1:
77
133
  _a.sent();
78
134
  return [2 /*return*/];
package/dist/main.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from "./common/ToolbarItem";
2
- export * from "./ToFortuneSheet/ImportHelper";
2
+ export * from "./common/FortuneExcelHelper";
package/dist/main.js CHANGED
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./common/ToolbarItem"), exports);
18
- __exportStar(require("./ToFortuneSheet/ImportHelper"), exports);
18
+ __exportStar(require("./common/FortuneExcelHelper"), exports);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "src/*"
5
5
  ],
6
- "version": "1.2.5",
6
+ "version": "2.0.0",
7
7
  "description": "An Excel import/export import library for FortuneSheet",
8
8
  "main": "dist/main.js",
9
9
  "types": "dist/main.d.ts",