rdesktop^2
filip mertens 1 year ago
parent d1073ed322
commit 7dac9f1731
  1. 146
      libs/remix-ui/search/src/lib/components/results/SearchHelper.ts
  2. 2
      libs/remix-ui/search/src/lib/context/context.tsx

@ -1,9 +1,18 @@
import { EOL } from 'os' import { EOL } from 'os'
import { SearchResultLineLine } from '../../types' import { SearchResultLineLine } from '../../types'
import isElectron from 'is-electron'
export const getDirectory = async (dir: string, plugin: any) => { export const getDirectory = async (dir: string, plugin: any) => {
let result = [] let result = []
if (isElectron()) {
const files = await plugin.call('fs', 'glob', dir, '**/*')
// only get path property of files
result = files.map(x => x.path)
} else {
const files = await plugin.call('fileManager', 'readdir', dir) const files = await plugin.call('fileManager', 'readdir', dir)
const fileArray = normalize(files) const fileArray = normalize(files)
for (const fi of fileArray) { for (const fi of fileArray) {
@ -16,94 +25,95 @@ export const getDirectory = async (dir: string, plugin: any) => {
} }
} }
} }
return result
} }
return result
}
const normalize = filesList => { const normalize = filesList => {
const folders = [] const folders = []
const files = [] const files = []
Object.keys(filesList || {}).forEach(key => { Object.keys(filesList || {}).forEach(key => {
if (filesList[key].isDirectory) { if (filesList[key].isDirectory) {
folders.push({ folders.push({
filename: key, filename: key,
data: filesList[key] data: filesList[key]
}) })
} else { } else {
files.push({ files.push({
filename: key, filename: key,
data: filesList[key] data: filesList[key]
}) })
} }
}) })
return [...folders, ...files] return [...folders, ...files]
} }
export const findLinesInStringWithMatch = (str: string, re: RegExp) => { export const findLinesInStringWithMatch = (str: string, re: RegExp) => {
return str return str
.split(/\r?\n/) .split(/\r?\n/)
.map(function (line, i) { .map(function (line, i) {
const matchResult = matchesInString(line, re) const matchResult = matchesInString(line, re)
if (matchResult.length) { if (matchResult.length) {
return { return {
lines: splitLines(matchResult, i), lines: splitLines(matchResult, i),
} }
} }
}) })
.filter(Boolean) .filter(Boolean)
} }
const matchesInString = (str: string, re: RegExp) => { const matchesInString = (str: string, re: RegExp) => {
let a: RegExpExecArray let a: RegExpExecArray
const results:RegExpExecArray[] = []; const results: RegExpExecArray[] = [];
while ((a = re.exec(str || '')) !== null) { while ((a = re.exec(str || '')) !== null) {
results.push(a); results.push(a);
} }
return results return results
} }
const splitLines = (matchResult: RegExpExecArray[], lineNumber: number) => { const splitLines = (matchResult: RegExpExecArray[], lineNumber: number) => {
return matchResult.map((matchResultPart, i) => { return matchResult.map((matchResultPart, i) => {
const result:SearchResultLineLine = { const result: SearchResultLineLine = {
left: matchResultPart.input.substring(0, matchResultPart.index), left: matchResultPart.input.substring(0, matchResultPart.index),
right: matchResultPart.input.substring(matchResultPart.index + matchResultPart[0].length), right: matchResultPart.input.substring(matchResultPart.index + matchResultPart[0].length),
center: matchResultPart[0], center: matchResultPart[0],
position : { position: {
start: { start: {
line: lineNumber, line: lineNumber,
column: matchResultPart.index, column: matchResultPart.index,
}, },
end: { end: {
line: lineNumber, line: lineNumber,
column: matchResultPart.index + matchResultPart[0].length, column: matchResultPart.index + matchResultPart[0].length,
}, },
}, },
} }
return result return result
}) })
} }
function getEOL(text) { function getEOL(text) {
const m = text.match(/\r\n|\n/g); const m = text.match(/\r\n|\n/g);
const u = m && m.filter(a => a === '\n').length; const u = m && m.filter(a => a === '\n').length;
const w = m && m.length - u; const w = m && m.length - u;
if (u === w) { if (u === w) {
return EOL; // use the OS default return EOL; // use the OS default
} }
return u > w ? '\n' : '\r\n'; return u > w ? '\n' : '\r\n';
} }
export const replaceAllInFile = (string: string, re:RegExp, newText: string) => { export const replaceAllInFile = (string: string, re: RegExp, newText: string) => {
return string.replace(re, newText) return string.replace(re, newText)
} }
export const replaceTextInLine = (str: string, searchResultLine: SearchResultLineLine, newText: string) => { export const replaceTextInLine = (str: string, searchResultLine: SearchResultLineLine, newText: string) => {
return str return str
.split(/\r?\n/) .split(/\r?\n/)
.map(function (line, i) { .map(function (line, i) {
if (i === searchResultLine.position.start.line) { if (i === searchResultLine.position.start.line) {
return searchResultLine.left + newText + searchResultLine.right return searchResultLine.left + newText + searchResultLine.right
} }
return line return line
}).join(getEOL(str)) }).join(getEOL(str))
} }

@ -311,7 +311,6 @@ export const SearchProvider = ({
} }
useEffect(() => { useEffect(() => {
return
plugin.on('filePanel', 'setWorkspace', async workspace => { plugin.on('filePanel', 'setWorkspace', async workspace => {
value.setSearchResults(null) value.setSearchResults(null)
value.clearUndo() value.clearUndo()
@ -418,6 +417,7 @@ export const SearchProvider = ({
}, [state.count]) }, [state.count])
useEffect(() => { useEffect(() => {
console.log('STATE CHANGED', files)
if (state.find) { if (state.find) {
(async () => { (async () => {
try { try {

Loading…
Cancel
Save