-
+
+
+
powered by SOC Prime, Inc.
diff --git a/uncoder-os/src/pages/UncoderEditor/UncoderEditor.sass b/uncoder-os/src/pages/UncoderEditor/UncoderEditor.sass
index 8c777171..166e1826 100644
--- a/uncoder-os/src/pages/UncoderEditor/UncoderEditor.sass
+++ b/uncoder-os/src/pages/UncoderEditor/UncoderEditor.sass
@@ -1,11 +1,12 @@
-@import ../../assets/sass/helpers/variables
-@import ../../assets/sass/helpers/mixins
+@use "sass:color"
+@use "../../assets/sass/helpers/variables" as *
+@use "../../assets/sass/helpers/mixins" as *
.main-grid
border-radius: 4px
border: 1px solid rgba($borderGray, .3)
background-color: $backgroundBlueLight
- box-shadow: 0 6px 12px transparentize($black, .8), 0 24px 40px transparentize($black, .8)
+ box-shadow: 0 6px 12px color.scale($black, $alpha: -80%), 0 24px 40px color.scale($black, $alpha: -80%)
&__scroll
overflow-x: auto
max-width: 100%
diff --git a/uncoder-os/src/pages/UncoderEditor/UncoderEditor.tsx b/uncoder-os/src/pages/UncoderEditor/UncoderEditor.tsx
index c16b4a74..24f96c2d 100644
--- a/uncoder-os/src/pages/UncoderEditor/UncoderEditor.tsx
+++ b/uncoder-os/src/pages/UncoderEditor/UncoderEditor.tsx
@@ -1,10 +1,13 @@
import React, { FC } from 'react';
import { Provider } from 'react-redux';
+import { ErrorBoundary } from 'react-error-boundary';
import { getStoreObject } from '../../reduxData/store';
import {
TextEditorHeader, TextEditorSubheader, InputTextEditor, OutputTextEditor,
} from '../../components/TextEditor';
import { InfoProvider } from '../../components/Info';
+import { ErrorBoundaryFallback } from '../../components/ErrorBoundaryFallback';
+import { IocsStatistic } from '../../components/IocsStatistic';
import './UncoderEditor.sass';
@@ -13,23 +16,26 @@ type UncoderEditorProps = {
}
export const UncoderEditor: FC
= ({ apiBaseUrl }) => (
-
-
-
-
-
-
-
-
-
-
-
-
+
+
);
diff --git a/uncoder-os/src/processes/CalculateIocsMessage.ts b/uncoder-os/src/processes/CalculateIocsMessage.ts
new file mode 100644
index 00000000..7093ffd5
--- /dev/null
+++ b/uncoder-os/src/processes/CalculateIocsMessage.ts
@@ -0,0 +1,9 @@
+import { ProcessList } from './enums';
+import { IocsByTypeCountType } from '../types/iocsTypes';
+
+export type CalculateIocsMessage = {
+ action: ProcessList;
+ iocText?: string;
+ calculatedData?: IocsByTypeCountType;
+ totalCount?: number;
+};
diff --git a/uncoder-os/src/processes/enums.ts b/uncoder-os/src/processes/enums.ts
new file mode 100644
index 00000000..59c1b3f4
--- /dev/null
+++ b/uncoder-os/src/processes/enums.ts
@@ -0,0 +1,3 @@
+export enum ProcessList {
+ calculateIocs = 'calculateIocs',
+}
diff --git a/uncoder-os/src/processes/workers/calculateIocs.worker.ts b/uncoder-os/src/processes/workers/calculateIocs.worker.ts
new file mode 100644
index 00000000..5252fc15
--- /dev/null
+++ b/uncoder-os/src/processes/workers/calculateIocs.worker.ts
@@ -0,0 +1,37 @@
+/* eslint-disable no-restricted-globals */
+import { ProcessList } from '../enums';
+import { CalculateIocsMessage } from '../CalculateIocsMessage';
+import { calcIocsInText } from '../../components/IocsStatistic/calcIocsInText';
+import { BasicIocType, IocsByTypeCountType, IocsListTypes } from '../../types/iocsTypes';
+
+const getTotalIocsCount = (data: IocsByTypeCountType): number => {
+ let total = 0;
+ Object.keys(data).forEach((oneIocTypeKey) => {
+ const oneIocType: number = data[oneIocTypeKey as IocsListTypes] ?? 0;
+
+ if (oneIocTypeKey !== BasicIocType.Hash) {
+ total += oneIocType;
+ }
+ });
+
+ return total;
+};
+
+self.onmessage = (e: MessageEvent
) => {
+ const data = JSON.parse(e.data) as CalculateIocsMessage;
+ if (data.action !== ProcessList.calculateIocs) {
+ return;
+ }
+
+ const result = calcIocsInText(data.iocText || '');
+
+ self.postMessage(
+ JSON.stringify({
+ action: ProcessList.calculateIocs,
+ calculatedData: result,
+ totalCount: getTotalIocsCount(result),
+ }),
+ );
+};
+
+export {};
diff --git a/uncoder-os/src/reduxData/RootStore.ts b/uncoder-os/src/reduxData/RootStore.ts
index 2e349d9f..9d2d8acd 100644
--- a/uncoder-os/src/reduxData/RootStore.ts
+++ b/uncoder-os/src/reduxData/RootStore.ts
@@ -3,10 +3,11 @@ import { StateFromReducersMapObject } from 'redux';
import { PlatformsResponse, SuggesterDictionaryResponse } from '../models/Providers/type';
import { BasicIocType, HashIocType, IocParsingRulesType } from '../types/iocsTypes';
import { Severity } from '../enums';
+import { EditorValueTypes } from '../types/editorValueTypes';
export type UncoderEditorStateType = {
text: string;
- platformCode: string;
+ platformCode: EditorValueTypes;
};
export type InputEditorStateType = UncoderEditorStateType & { changed: boolean };
diff --git a/uncoder-os/src/reduxData/inputEditor/inputEditor.ts b/uncoder-os/src/reduxData/inputEditor/inputEditor.ts
index 0d7b4f8a..252f343a 100644
--- a/uncoder-os/src/reduxData/inputEditor/inputEditor.ts
+++ b/uncoder-os/src/reduxData/inputEditor/inputEditor.ts
@@ -2,15 +2,17 @@ import type { CaseReducer, PayloadAction } from '@reduxjs/toolkit';
import { createSelector, createSlice } from '@reduxjs/toolkit';
import { RootState, InputEditorStateType } from '../RootStore';
import { inputTextEditorPlaceholder } from '../../constants/inputTextEditorPlaceholder';
+import { EditorValueTypes } from '../../types/editorValueTypes';
type InputEditorReducers = {
setText: CaseReducer>;
- setPlatformCode: CaseReducer>;
+ clearText: CaseReducer;
+ setPlatformCode: CaseReducer>;
};
const initialState: InputEditorStateType = {
text: inputTextEditorPlaceholder,
- platformCode: 'none',
+ platformCode: EditorValueTypes.none,
changed: false,
};
@@ -22,6 +24,10 @@ const inputEditorSlice = createSlice(
state.text = action.payload;
state.changed = true;
},
+ clearText: (state) => {
+ state.text = '';
+ state.changed = true;
+ },
setPlatformCode: (state, action) => {
state.platformCode = action.payload;
},
@@ -43,11 +49,12 @@ export const inputEditorTextSelector = createSelector(
export const inputEditorPlatformCodeSelector = createSelector(
selectSelf,
- (state: RootState): string => state.inputEditor.platformCode,
+ (state: RootState): EditorValueTypes => state.inputEditor.platformCode,
);
export const {
setText,
+ clearText,
setPlatformCode,
} = actions;
diff --git a/uncoder-os/src/reduxData/iocSettings/iocSettings.ts b/uncoder-os/src/reduxData/iocSettings/iocSettings.ts
index 9a02361e..3062e3f9 100644
--- a/uncoder-os/src/reduxData/iocSettings/iocSettings.ts
+++ b/uncoder-os/src/reduxData/iocSettings/iocSettings.ts
@@ -78,6 +78,11 @@ export const iocSettingsSelector = createSelector(
(state: RootState): IocSettingsStateType => state.iocSettings,
);
+export const iocParsingRulesSelector = createSelector(
+ selectSelf,
+ (state: RootState): IocParsingRulesType[] => state.iocSettings.iocParsingRules,
+);
+
export const {
setIocPerQuery,
setIncludeIocTypes,
diff --git a/uncoder-os/src/reduxData/outputEditor/outputEditor.ts b/uncoder-os/src/reduxData/outputEditor/outputEditor.ts
index 9156ea71..6a4ef874 100644
--- a/uncoder-os/src/reduxData/outputEditor/outputEditor.ts
+++ b/uncoder-os/src/reduxData/outputEditor/outputEditor.ts
@@ -6,15 +6,17 @@ import { TranslateIocRequest, TranslateRequest } from '../../models/Providers/ty
import { openInfoMessage, postponedCloseInfoMessage } from '../info';
import { Severity } from '../../enums';
import { DEFAULT_ERROR_TTL } from '../../components/Info';
+import { EditorValueTypes } from '../../types/editorValueTypes';
type OutputEditorReducers = {
setText: CaseReducer>;
- setPlatformCode: CaseReducer>;
+ clearText: CaseReducer;
+ setPlatformCode: CaseReducer>;
};
const initialState: OutputEditorStateType = {
text: '',
- platformCode: 'none',
+ platformCode: EditorValueTypes.none,
};
const outputEditorSlice = createSlice