fix: fileName formatting fixes

This commit is contained in:
Danny Avila 2023-04-06 16:18:36 -04:00
parent 4245b43140
commit 31cef16cc3
4 changed files with 103 additions and 5 deletions

View file

@ -31,6 +31,7 @@
"downloadjs": "^1.4.7", "downloadjs": "^1.4.7",
"esbuild": "0.17.15", "esbuild": "0.17.15",
"export-from-json": "^1.7.2", "export-from-json": "^1.7.2",
"filenamify": "^5.1.1",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lucide-react": "^0.113.0", "lucide-react": "^0.113.0",
@ -6451,6 +6452,33 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/filename-reserved-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
"integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/filenamify": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz",
"integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==",
"dependencies": {
"filename-reserved-regex": "^3.0.0",
"strip-outer": "^2.0.0",
"trim-repeated": "^2.0.0"
},
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.0.1",
"license": "MIT", "license": "MIT",
@ -12170,6 +12198,17 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/strip-outer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz",
"integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/style-loader": { "node_modules/style-loader": {
"version": "3.3.2", "version": "3.3.2",
"dev": true, "dev": true,
@ -12488,6 +12527,28 @@
"url": "https://github.com/sponsors/wooorm" "url": "https://github.com/sponsors/wooorm"
} }
}, },
"node_modules/trim-repeated": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz",
"integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==",
"dependencies": {
"escape-string-regexp": "^5.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/trim-repeated/node_modules/escape-string-regexp": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/trough": { "node_modules/trough": {
"version": "2.1.0", "version": "2.1.0",
"license": "MIT", "license": "MIT",
@ -17634,6 +17695,21 @@
} }
} }
}, },
"filename-reserved-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
"integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw=="
},
"filenamify": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz",
"integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==",
"requires": {
"filename-reserved-regex": "^3.0.0",
"strip-outer": "^2.0.0",
"trim-repeated": "^2.0.0"
}
},
"fill-range": { "fill-range": {
"version": "7.0.1", "version": "7.0.1",
"requires": { "requires": {
@ -20915,6 +20991,11 @@
"version": "3.1.1", "version": "3.1.1",
"dev": true "dev": true
}, },
"strip-outer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz",
"integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg=="
},
"style-loader": { "style-loader": {
"version": "3.3.2", "version": "3.3.2",
"dev": true, "dev": true,
@ -21105,6 +21186,21 @@
"trim-lines": { "trim-lines": {
"version": "3.0.1" "version": "3.0.1"
}, },
"trim-repeated": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz",
"integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==",
"requires": {
"escape-string-regexp": "^5.0.0"
},
"dependencies": {
"escape-string-regexp": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
}
}
},
"trough": { "trough": {
"version": "2.1.0" "version": "2.1.0"
}, },

View file

@ -43,6 +43,7 @@
"downloadjs": "^1.4.7", "downloadjs": "^1.4.7",
"esbuild": "0.17.15", "esbuild": "0.17.15",
"export-from-json": "^1.7.2", "export-from-json": "^1.7.2",
"filenamify": "^5.1.1",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"lucide-react": "^0.113.0", "lucide-react": "^0.113.0",

View file

@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { useSetRecoilState, useRecoilValue } from 'recoil'; import { useSetRecoilState, useRecoilValue } from 'recoil';
import filenamify from 'filenamify';
import axios from 'axios'; import axios from 'axios';
import exportFromJSON from 'export-from-json'; import exportFromJSON from 'export-from-json';
import DialogTemplate from '../ui/DialogTemplate'; import DialogTemplate from '../ui/DialogTemplate';
@ -51,9 +52,10 @@ const EditPresetDialog = ({ open, onOpenChange, preset: _preset, title }) => {
}; };
const exportPreset = () => { const exportPreset = () => {
const fileName = filenamify(preset?.title || 'preset');
exportFromJSON({ exportFromJSON({
data: cleanupPreset({ preset, endpointsFilter }), data: cleanupPreset({ preset, endpointsFilter }),
fileName: `${preset?.title}.json`, fileName,
exportType: exportFromJSON.types.json exportType: exportFromJSON.types.json
}); });
}; };

View file

@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { useRecoilValue, useRecoilCallback } from 'recoil'; import { useRecoilValue, useRecoilCallback } from 'recoil';
import filenamify from 'filenamify';
import exportFromJSON from 'export-from-json'; import exportFromJSON from 'export-from-json';
import download from 'downloadjs'; import download from 'downloadjs';
import DialogTemplate from '~/components/ui/DialogTemplate.jsx'; import DialogTemplate from '~/components/ui/DialogTemplate.jsx';
@ -40,9 +41,7 @@ export default function ExportModel({ open, onOpenChange }) {
useEffect(() => { useEffect(() => {
setFileName( setFileName(
String(conversation?.title) filenamify(String(conversation?.title || 'file'))
.replace(/[^a-z0-9]/gi, '_')
.toLowerCase() || 'file'
); );
setType('text'); setType('text');
setIncludeOptions(true); setIncludeOptions(true);
@ -292,7 +291,7 @@ export default function ExportModel({ open, onOpenChange }) {
<Input <Input
id="filename" id="filename"
value={filename} value={filename}
onChange={e => setFileName(e.target.value || '')} onChange={e => setFileName(filenamify(e.target.value || ''))}
placeholder="Set the filename" placeholder="Set the filename"
className={cn( className={cn(
defaultTextProps, defaultTextProps,