@nyris/nyris-webapp 0.3.2 → 0.3.5

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.
Files changed (46) hide show
  1. package/build/asset-manifest.json +8 -8
  2. package/build/index.html +1 -1
  3. package/build/js/test.js +14 -20
  4. package/build/{precache-manifest.8f85a4fff2063a7498a608ec69549bb1.js → precache-manifest.bbb31f2ce7710d7eb3175b1b48241d24.js} +9 -9
  5. package/build/service-worker.js +1 -1
  6. package/build/static/js/2.4a55bc61.chunk.js +3 -0
  7. package/build/static/js/{2.efc0ab83.chunk.js.LICENSE.txt → 2.4a55bc61.chunk.js.LICENSE.txt} +0 -9
  8. package/build/static/js/2.4a55bc61.chunk.js.map +1 -0
  9. package/build/static/js/main.2660f94a.chunk.js +2 -0
  10. package/build/static/js/main.2660f94a.chunk.js.map +1 -0
  11. package/package.json +3 -3
  12. package/public/js/test.js +14 -20
  13. package/src/App.tsx +3 -7
  14. package/src/Store/Nyris.ts +7 -7
  15. package/src/Store/Search.ts +48 -74
  16. package/src/Store/Store.ts +12 -5
  17. package/src/components/CustomHits/index.tsx +57 -0
  18. package/src/components/DragDropFile.tsx +27 -23
  19. package/src/components/ExampleImages.tsx +2 -2
  20. package/src/components/Feedback.tsx +2 -2
  21. package/src/components/Footer.tsx +1 -1
  22. package/src/components/HeaderMd.tsx +4 -5
  23. package/src/index.tsx +2 -1
  24. package/src/modules/LandingPage/{indexApp.tsx → App.tsx} +52 -208
  25. package/src/modules/LandingPage/{indexAppMD.tsx → AppMD.tsx} +52 -147
  26. package/src/modules/LandingPage/index.tsx +169 -0
  27. package/src/modules/LandingPage/indexNewVersion.tsx +14 -21
  28. package/src/modules/LandingPage/propsType.ts +43 -0
  29. package/src/page/result/index.tsx +51 -106
  30. package/src/services/Feedback.ts +46 -47
  31. package/src/services/image.ts +28 -98
  32. package/src/services/session.ts +13 -16
  33. package/src/services/types.ts +2 -48
  34. package/src/types.ts +12 -8
  35. package/build/static/js/2.efc0ab83.chunk.js +0 -3
  36. package/build/static/js/2.efc0ab83.chunk.js.map +0 -1
  37. package/build/static/js/main.3bfed050.chunk.js +0 -2
  38. package/build/static/js/main.3bfed050.chunk.js.map +0 -1
  39. package/src/App.test.tsx +0 -49
  40. package/src/Store/common.d.ts +0 -10
  41. package/src/Store/epics/feedback.ts +0 -59
  42. package/src/Store/epics/types.ts +0 -12
  43. package/src/components/preview/preview.tsx +0 -433
  44. package/src/services/findByImage.ts +0 -24
  45. package/src/services/findRegionsCustom.ts +0 -212
  46. package/src/services/nyris.ts +0 -123
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nyris/nyris-webapp",
3
- "version": "0.3.2",
3
+ "version": "0.3.5",
4
4
  "homepage": "./",
5
5
  "dependencies": {
6
6
  "@babel/runtime": "^7.17.2",
@@ -8,8 +8,8 @@
8
8
  "@material-ui/data-grid": "^4.0.0-alpha.37",
9
9
  "@material-ui/icons": "^4.4.1",
10
10
  "@material-ui/lab": "^4.0.0-alpha.60",
11
- "@nyris/nyris-api": "^0.3.2",
12
- "@nyris/nyris-react-components": "^0.3.2",
11
+ "@nyris/nyris-api": "^0.3.5",
12
+ "@nyris/nyris-react-components": "^0.3.5",
13
13
  "@reduxjs/toolkit": "^1.6.1",
14
14
  "@types/blueimp-load-image": "^2.23.4",
15
15
  "@types/classnames": "^2.2.9",
package/public/js/test.js CHANGED
@@ -12,15 +12,14 @@ var settings = {
12
12
  resultTemplate: "default",
13
13
  responseFormat: "application/offers.complete+json",
14
14
  exampleImages: [
15
- "https://img.nyris.io/demo/everybag/kissen.jpg",
16
- "https://img.nyris.io/demo/everybag/aspirin.jpg",
17
- "https://img.nyris.io/demo/everybag/lego.jpg",
18
- "https://img.nyris.io/demo/everybag/wdr_add_2.jpg",
19
- "https://img.nyris.io/demo/everybag/mb-dle-4.jpg",
15
+ "https://storage.googleapis.com/nyris/share/examples_search/example_1.jpg",
16
+ "https://storage.googleapis.com/nyris/share/examples_search/example_2.jpg",
17
+ "https://storage.googleapis.com/nyris/share/examples_search/example_3.jpg",
18
+ "https://storage.googleapis.com/nyris/share/examples_search/example_4.jpg",
20
19
  ],
21
20
  deactivated: false,
22
21
  cadSearch: false,
23
- theme: {
22
+ themePage: {
24
23
  default: {
25
24
  active: false,
26
25
  },
@@ -40,23 +39,18 @@ var settings = {
40
39
  resultLinkIcon: "eye",
41
40
  },
42
41
  },
43
- searchSuite: {
42
+ newVersion: {
44
43
  active: true,
45
44
  },
46
45
  },
47
-
48
- algolia: {
49
- appIdAlgolia: "HBDJYUK5G4",
50
- indexNameAlgolia: "Normparts",
51
- apiKeyAlgolia: "f6a833ff662086f362b93064b9de6f02",
52
- },
53
- apiNyris: {
54
- imageMatchingUrl: "https://api.nyris.io/find/v1",
55
- imageMatchingUrlBySku: "https://api.nyris.io/recommend/v1",
56
- imageMatchingSubmitManualUrl: "https://api.nyris.io/find/v1/manual",
57
- regionProposalUrl: "https://api.nyris.io/find/v1/regions",
58
- feedbackUrl: "https://api.nyris.io/feedback/v1",
59
- }
46
+ imageMatchingUrl: "https://api.nyris.io/find/v1",
47
+ imageMatchingUrlBySku: "https://api.nyris.io/recommend/v1",
48
+ imageMatchingSubmitManualUrl: "https://api.nyris.io/find/v1/manual",
49
+ regionProposalUrl: "https://api.nyris.io/find/v1/regions",
50
+ feedbackUrl: "https://api.nyris.io/feedback/v1",
51
+ appIdAlgolia: "HBDJYUK5G4",
52
+ indexNameAlgolia: "Normparts",
53
+ apiKeyAlgolia: "f6a833ff662086f362b93064b9de6f02",
60
54
  };
61
55
  settings["customSearchRequest"] = null;
62
56
  settings["responseHook"] = null;
package/src/App.tsx CHANGED
@@ -4,17 +4,13 @@ import React from "react";
4
4
  import "typeface-roboto";
5
5
  import "index.css";
6
6
  import { useAppSelector } from "Store/Store";
7
- import LandingPageApp from "modules/LandingPage/indexApp";
8
- import LandingPageAppMD from "modules/LandingPage/indexAppMD";
7
+ import LandingPageApp from "modules/LandingPage/index";
9
8
  import AppNewVersion from "modules/LandingPage/indexNewVersion";
10
- import {AppState} from "./types";
11
9
 
12
10
  function App(): JSX.Element {
13
- const { settings } = useAppSelector<AppState>((state: any) => state);
11
+ const { settings } = useAppSelector((state) => state);
14
12
  const { themePage } = settings;
15
- let SelectedApp =
16
- themePage.default?.active ? LandingPageApp : (
17
- themePage.materialDesign?.active ? LandingPageAppMD : AppNewVersion);
13
+ let SelectedApp = themePage.searchSuite?.active ? AppNewVersion : LandingPageApp;
18
14
 
19
15
  return <SelectedApp />;
20
16
  }
@@ -1,4 +1,4 @@
1
- import { createSlice, PayloadAction } from "@reduxjs/toolkit";
1
+ import { createSlice } from "@reduxjs/toolkit";
2
2
 
3
3
  export type NyrisAppPart = "start" | "camera" | "results";
4
4
  export type NyrisFeedbackState =
@@ -20,7 +20,7 @@ export const nyrisSlice = createSlice({
20
20
  name: "nyris",
21
21
  initialState,
22
22
  reducers: {
23
- showStart: (state, _data: PayloadAction<any>) => {
23
+ showStart: (state) => {
24
24
  return {
25
25
  ...state,
26
26
  showPart: "start",
@@ -32,31 +32,31 @@ export const nyrisSlice = createSlice({
32
32
  showPart: "camera",
33
33
  };
34
34
  },
35
- showResults: (state, _data: PayloadAction<any>) => {
35
+ showResults: (state) => {
36
36
  return {
37
37
  ...state,
38
38
  showPart: "results",
39
39
  };
40
40
  },
41
- showFeedback: (state, _data: PayloadAction<any>) => {
41
+ showFeedback: (state) => {
42
42
  return {
43
43
  ...state,
44
44
  feedbackState: "question",
45
45
  };
46
46
  },
47
- hideFeedback: (state, _data: PayloadAction<any>) => {
47
+ hideFeedback: (state) => {
48
48
  return {
49
49
  ...state,
50
50
  feedbackState: "hidden",
51
51
  };
52
52
  },
53
- feedbackSubmitPositive: (state, _data: PayloadAction<any>) => {
53
+ feedbackSubmitPositive: (state) => {
54
54
  return {
55
55
  ...state,
56
56
  feedbackState: "positive",
57
57
  };
58
58
  },
59
- feedbackNegative: (state, _data: PayloadAction<any>) => {
59
+ feedbackNegative: (state) => {
60
60
  return {
61
61
  ...state,
62
62
  feedbackState: "negative",
@@ -2,37 +2,6 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
2
2
  import { CanvasWithId } from "types";
3
3
  import { Code, RectCoords, Region } from "@nyris/nyris-api";
4
4
 
5
- export type ImageSourceType =
6
- | { url: string }
7
- | { file: File }
8
- | { image: HTMLCanvasElement };
9
-
10
- export type SearchAction =
11
- | { type: "FEEDBACK_SUBMIT_POSITIVE" }
12
- | { type: "FEEDBACK_SUBMIT_NEGATIVE" }
13
- | { type: "IMAGE_LOADED"; image: CanvasWithId }
14
- | { type: "REGION_REQUEST_START"; image: HTMLCanvasElement }
15
- | { type: "REGION_REQUEST_SUCCEED"; regions: Region[] }
16
- | { type: "REGION_REQUEST_FAIL"; reason: string; exception: any }
17
- | {
18
- type: "SEARCH_REQUEST_START";
19
- image: HTMLCanvasElement;
20
- normalizedRect?: RectCoords;
21
- }
22
- | { type: "SEARCH_REQUEST_START"; file: File }
23
- | {
24
- type: "SEARCH_REQUEST_SUCCEED";
25
- results: any[];
26
- requestId: string;
27
- duration: number;
28
- categoryPredictions: CategoryPrediction[];
29
- codes: Code[];
30
- }
31
- | { type: "SEARCH_REQUEST_FAIL"; reason: string; exception?: any }
32
- | { type: "REGION_CHANGED"; normalizedRect: RectCoords }
33
- | ({ type: "LOAD_IMAGE" } & ImageSourceType)
34
- | { type: "LOAD_FILE"; file: File }
35
- | { type: "CAD_LOADED"; file: File };
36
5
 
37
6
  interface CategoryPrediction {
38
7
  name: string;
@@ -45,12 +14,11 @@ export interface SearchState {
45
14
  requestId?: string;
46
15
  sessionId?: string;
47
16
  regions: Region[];
48
- selectedRegion: RectCoords;
17
+ selectedRegion?: RectCoords;
49
18
  fetchingRegions: boolean;
50
19
  fetchingResults: boolean;
51
20
  filterOptions: string[];
52
21
  requestImage?: CanvasWithId;
53
- requestCadFile?: File;
54
22
  categoryPredictions: CategoryPrediction[];
55
23
  codes: Code[];
56
24
  errorMessage: string;
@@ -65,7 +33,7 @@ export interface SearchState {
65
33
  const initialState: SearchState = {
66
34
  results: [],
67
35
  regions: [],
68
- selectedRegion: { x1: 0.1, x2: 0.9, y1: 0.1, y2: 0.9 },
36
+ selectedRegion: undefined,
69
37
  requestImage: undefined,
70
38
  fetchingResults: false,
71
39
  fetchingRegions: false,
@@ -80,46 +48,51 @@ const initialState: SearchState = {
80
48
  loadingSearchAlgolia: false,
81
49
  };
82
50
 
83
- export const searchSlice = createSlice({
84
- name: "search",
85
- initialState,
86
- reducers: {
87
- loadFile: (state, data: PayloadAction<any>) => {
51
+
52
+ export const searchSlice = createSlice({
53
+ name: "search",
54
+ initialState,
55
+ reducers: {
56
+ setSearchResults: (state, data) => {
88
57
  const { payload } = data;
89
58
  const {
90
- requestImage,
91
59
  results,
92
60
  requestId,
93
61
  categoryPredictions,
94
62
  codes,
95
63
  duration,
96
- regions,
97
- selectedRegion,
98
64
  filters,
99
65
  } = payload;
100
66
  return {
101
67
  ...state,
102
68
  filters,
103
- requestImage,
104
69
  results,
105
70
  requestId,
106
71
  categoryPredictions,
107
72
  codes,
108
73
  duration,
109
74
  sessionId: state.sessionId || requestId,
110
- regions,
111
- selectedRegion,
112
75
  fetchingResults: false,
113
76
  };
114
77
  },
115
78
 
116
- loadCadFileLoad: (state, data: PayloadAction<any>) => {
117
- const { payload } = data;
118
- return {
79
+ setRegions: (state, data: PayloadAction<Region[]>) => ({
80
+ ...state,
81
+ regions: data.payload
82
+ }),
83
+
84
+ setSelectedRegion: (state, data: PayloadAction<RectCoords|undefined>) => ({
85
+ ...state,
86
+ selectedRegion: data.payload
87
+ }),
88
+
89
+ setRequestImage: (state, data: PayloadAction<HTMLCanvasElement>) => ({
119
90
  ...state,
120
- requestCadFile: payload,
121
- };
122
- },
91
+ requestImage: {
92
+ canvas: data.payload,
93
+ id: Math.random().toString()
94
+ }
95
+ }),
123
96
 
124
97
  selectionChanged: (state, data: PayloadAction<RectCoords>) => {
125
98
  const { payload } = data;
@@ -144,19 +117,13 @@ export const searchSlice = createSlice({
144
117
  fetchingRegions: false,
145
118
  };
146
119
  },
147
- submitPositiveFeedback: (state, data: PayloadAction<RectCoords>) => {
148
- return;
149
- },
150
- submitNegativeFeedback: (state, data: PayloadAction<RectCoords>) => {
151
- return;
152
- },
153
- loadingActionResults: (state, _data: PayloadAction<any>) => {
120
+ loadingActionResults: (state) => {
154
121
  return {
155
122
  ...state,
156
123
  fetchingResults: true,
157
124
  };
158
125
  },
159
- loadingActionRegions: (state, _data: PayloadAction<any>) => {
126
+ loadingActionRegions: (state) => {
160
127
  return {
161
128
  ...state,
162
129
  fetchingRegions: true,
@@ -170,7 +137,6 @@ export const searchSlice = createSlice({
170
137
  duration,
171
138
  categoryPredictions,
172
139
  codes,
173
- requestImage,
174
140
  } = payload;
175
141
  return {
176
142
  ...state,
@@ -179,32 +145,31 @@ export const searchSlice = createSlice({
179
145
  duration,
180
146
  categoryPredictions,
181
147
  codes,
182
- requestImage,
183
148
  fetchingResults: false,
184
149
  };
185
150
  },
186
- changeValueTextSearch: (state: any, data: PayloadAction<any>) => {
151
+ changeValueTextSearch: (state, data: PayloadAction<any>) => {
187
152
  const { payload } = data;
188
153
  return {
189
154
  ...state,
190
155
  valueTextSearch: payload,
191
156
  };
192
157
  },
193
- resultSearchText: (state: any, data: PayloadAction<any>) => {
158
+ resultSearchText: (state, data: PayloadAction<any>) => {
194
159
  const { payload } = data;
195
160
  return {
196
161
  ...state,
197
162
  resultSearchText: payload,
198
163
  };
199
164
  },
200
- updateResults: (state: any, data: PayloadAction<any>) => {
165
+ updateResults: (state, data: PayloadAction<any>) => {
201
166
  const { payload } = data;
202
167
  return {
203
168
  ...state,
204
169
  results: payload,
205
170
  };
206
171
  },
207
- reset: (state: any, data: PayloadAction<any>) => {
172
+ reset: (state, data: PayloadAction<any>) => {
208
173
  return {
209
174
  results: [],
210
175
  regions: [],
@@ -222,22 +187,21 @@ export const searchSlice = createSlice({
222
187
  loadingSearchAlgolia: false,
223
188
  };
224
189
  },
225
- configureFilter: (state: any, data: PayloadAction<any>) => {
190
+ configureFilter: (state, data: PayloadAction<any>) => {
226
191
  const { payload } = data;
227
192
  return {
228
193
  ...state,
229
194
  configureFilter: payload,
230
195
  };
231
196
  },
232
- setUpdateSession: (state: any, data: PayloadAction<any>) => {
197
+ setUpdateSession: (state, data: PayloadAction<string>) => {
233
198
  const { payload } = data;
234
199
  return {
235
200
  ...state,
236
- requestId: payload.requestId,
237
- sessionId: payload.sessionId,
201
+ sessionId: payload,
238
202
  };
239
203
  },
240
- updateResultChangePosition: (state: any, data: PayloadAction<any>) => {
204
+ updateResultChangePosition: (state, data: PayloadAction<any>) => {
241
205
  const { payload } = data;
242
206
  const { results } = payload;
243
207
  return {
@@ -245,16 +209,25 @@ export const searchSlice = createSlice({
245
209
  results,
246
210
  };
247
211
  },
212
+
213
+ setError: (state, data: PayloadAction<string>) => {
214
+ return {
215
+ ...state,
216
+ fetchingRegions: false,
217
+ fetchingResults: false,
218
+ errorMessage: data.payload
219
+ }
220
+ }
248
221
  },
249
222
  });
250
223
 
251
224
  export const {
252
- loadFile,
225
+ setSearchResults,
253
226
  selectionChanged,
254
- submitPositiveFeedback,
255
- submitNegativeFeedback,
256
- loadCadFileLoad,
227
+ setRequestImage,
257
228
  loadFileSelectRegion,
229
+ setRegions,
230
+ setSelectedRegion,
258
231
  loadingActionResults,
259
232
  loadingActionRegions,
260
233
  searchFileImageNonRegion,
@@ -265,5 +238,6 @@ export const {
265
238
  configureFilter,
266
239
  setUpdateSession,
267
240
  updateResultChangePosition,
241
+ setError,
268
242
  } = searchSlice.actions;
269
243
  export default searchSlice.reducer;
@@ -1,21 +1,29 @@
1
1
  import { configureStore } from "@reduxjs/toolkit";
2
2
  import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
3
3
  import { combineReducers } from "redux";
4
- import thunk from "redux-thunk";
5
4
  import Auth from "Store/Auth";
6
- import { AppSettings } from "types";
7
- import { defaultSettings } from "defaults";
5
+ import {AppSettings, MDSettings} from "types";
8
6
  import { getUrlParam } from "utils";
9
7
  import Search from "Store/Search";
10
8
  import Nyris from "Store/Nyris";
9
+ import {defaultMdSettings, defaultSettings} from "../defaults";
11
10
 
12
11
  declare var settings: AppSettings;
13
12
 
13
+
14
+
14
15
  let normalizedSettings: AppSettings = {
15
16
  ...defaultSettings,
16
17
  ...settings,
17
18
  };
18
19
 
20
+ // spread default settings for material design
21
+ let mdSettings : MDSettings = {
22
+ ...defaultMdSettings,
23
+ ...settings.themePage.materialDesign
24
+ }
25
+ normalizedSettings.themePage.materialDesign = mdSettings;
26
+
19
27
  normalizedSettings = {
20
28
  ...normalizedSettings,
21
29
  apiKey: (getUrlParam("apiKey") as string) || normalizedSettings.apiKey,
@@ -28,7 +36,7 @@ normalizedSettings = {
28
36
 
29
37
  const reducers = combineReducers({
30
38
  auth: Auth,
31
- settings: () => normalizedSettings as AppSettings,
39
+ settings: () => normalizedSettings,
32
40
  search: Search,
33
41
  nyris: Nyris,
34
42
  });
@@ -36,7 +44,6 @@ const reducers = combineReducers({
36
44
  export const store = configureStore({
37
45
  reducer: reducers,
38
46
  devTools: process.env.NODE_ENV !== "production",
39
- middleware: [thunk],
40
47
  });
41
48
 
42
49
  export type RootState = ReturnType<typeof store.getState>;
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { connectHits } from "react-instantsearch-dom";
4
+ import ItemResult from "components/results/ItemResult";
5
+
6
+ function Hits({
7
+ hits,
8
+ setDataResultToAlgolia,
9
+ handlerToggleModal,
10
+ setOpenModalShare,
11
+ setSearchStateInput,
12
+ getUrlToCanvasFile,
13
+ setLoading,
14
+ sendFeedBackAction,
15
+ }: any): JSX.Element {
16
+ const handleSearch = () => {
17
+ setDataResultToAlgolia(hits);
18
+ };
19
+ console.log("hitshits", hits);
20
+
21
+ return (
22
+ <>
23
+ {handleSearch}
24
+ {hits.map((hit: any, index: any) => {
25
+ return (
26
+ <ItemResult
27
+ key={index}
28
+ dataItem={hit}
29
+ handlerToggleModal={() => {
30
+ handlerToggleModal(hit);
31
+ }}
32
+ handlerToggleModalShare={() => setOpenModalShare(true)}
33
+ indexItem={hit.__position}
34
+ isHover={false}
35
+ onSearchImage={(url: any) => {
36
+ setSearchStateInput({});
37
+ getUrlToCanvasFile(url);
38
+ setLoading(true);
39
+ }}
40
+ handlerFeedback={(value: string) => {
41
+ sendFeedBackAction(value);
42
+ }}
43
+ />
44
+ );
45
+ })}
46
+ </>
47
+ );
48
+ }
49
+
50
+ Hits.propTypes = {
51
+ hits: PropTypes.arrayOf(PropTypes.object),
52
+ objectIDs: PropTypes.arrayOf(PropTypes.string),
53
+ setObjectIDs: PropTypes.func,
54
+ };
55
+
56
+ const CustomHits = connectHits(Hits);
57
+ export default CustomHits;
@@ -4,17 +4,18 @@ import { useDropzone } from "react-dropzone";
4
4
  import IconSearch from "common/assets/icons/icon_search_image.svg";
5
5
  import { makeFileHandler } from "@nyris/nyris-react-components";
6
6
  import { useAppDispatch, useAppSelector } from "Store/Store";
7
- import { serviceImage, serviceImageNonRegion } from "services/image";
7
+ import {createImage, findByImage, findRegions} from "services/image";
8
8
  import {
9
- loadFile,
9
+ setSearchResults,
10
10
  loadingActionResults,
11
- searchFileImageNonRegion,
11
+ setRequestImage, setRegions, setSelectedRegion,
12
12
  } from "Store/Search";
13
13
  import { showFeedback, showResults } from "Store/Nyris";
14
14
  import { useHistory } from "react-router-dom";
15
15
  import ExampleImages from "./ExampleImages";
16
16
  import { feedbackClickEpic } from "services/Feedback";
17
17
  import { useState } from "react";
18
+ import {RectCoords} from "@nyris/nyris-api";
18
19
 
19
20
  interface Props {
20
21
  acceptTypes: any;
@@ -28,11 +29,10 @@ function DragDropFile(props: Props) {
28
29
  const { acceptTypes, onChangeLoading, isLoading } = props;
29
30
  const searchState = useAppSelector((state) => state);
30
31
  const { settings } = searchState;
31
- const [rectCoords] = useState<any>(undefined);
32
32
  const [isLoadingLoadFile, setLoadingLoadFile] = useState<any>(false);
33
33
 
34
34
  const { getRootProps, getInputProps, isDragActive } = useDropzone({
35
- onDrop: (fs: File[]) => {
35
+ onDrop: async (fs: File[]) => {
36
36
  onChangeLoading(true);
37
37
  console.log("321");
38
38
  let payload: any;
@@ -40,7 +40,10 @@ function DragDropFile(props: Props) {
40
40
  setLoadingLoadFile(true);
41
41
  console.log("fs", fs);
42
42
 
43
- return serviceImage(fs[0], searchState).then((res: any) => {
43
+ let image = await createImage(fs[0]);
44
+ dispatch(setRequestImage(image));
45
+ // TODO support regions
46
+ return findByImage(image, searchState.settings).then((res: any) => {
44
47
  console.log("res?.results", res);
45
48
 
46
49
  res?.results.map((item: any) => {
@@ -56,37 +59,38 @@ function DragDropFile(props: Props) {
56
59
  };
57
60
  console.log("payload", payload);
58
61
 
59
- dispatch(loadFile(payload));
62
+ dispatch(setSearchResults(payload));
60
63
  setLoadingLoadFile(false);
61
64
  onChangeLoading(false);
62
65
  history.push("/result");
63
- return dispatch(showFeedback(""));
66
+ return dispatch(showFeedback());
64
67
  });
65
68
  },
66
69
  });
67
70
 
68
- const getUrlToCanvasFile = (url: string, position?: number) => {
71
+ const getUrlToCanvasFile = async (url: string, position?: number) => {
69
72
  onChangeLoading(true);
70
- dispatch(showResults(""));
71
- dispatch(loadingActionResults(""));
73
+ dispatch(showResults());
74
+ dispatch(loadingActionResults());
72
75
  if (position) {
73
76
  feedbackClickEpic(searchState, position);
74
77
  }
75
78
 
79
+ let image = await createImage(url);
80
+ dispatch(setRequestImage(image));
81
+ let searchRegion: RectCoords| undefined = undefined;
76
82
  if (settings.regions) {
77
- serviceImage(url, searchState).then((res) => {
78
- dispatch(loadFile(res));
79
- onChangeLoading(false);
80
- history.push("/result");
81
- return dispatch(showFeedback(""));
82
- });
83
- } else {
84
- serviceImageNonRegion(url, searchState, rectCoords).then((res) => {
85
- onChangeLoading(false);
86
- history.push("/result");
87
- dispatch(searchFileImageNonRegion(res));
88
- });
83
+ let res = await findRegions(image, settings);
84
+ dispatch(setRegions(res.regions));
85
+ searchRegion = res.selectedRegion;
86
+ dispatch(setSelectedRegion(searchRegion));
89
87
  }
88
+ return findByImage(image, searchState.settings, searchRegion).then((res) => {
89
+ dispatch(setSearchResults(res));
90
+ onChangeLoading(false);
91
+ history.push("/result");
92
+ return dispatch(showFeedback());
93
+ });
90
94
  };
91
95
 
92
96
  return (
@@ -15,10 +15,10 @@ const ExampleImages: React.FC<ExampleImagesProps> = ({
15
15
  }
16
16
  return (
17
17
  <section className="useExampleImg">
18
- <Typography className="title-box">
18
+ <Typography className="title-box text-center">
19
19
  You can also try one of these pictures:
20
20
  </Typography>
21
- <div className="exampleImages">
21
+ <div className="exampleImages d-flex justify-center">
22
22
  <div className="exImagesWrap">
23
23
  {images.map((i) => {
24
24
  return (
@@ -19,9 +19,9 @@ const Feedback: React.FC<FeedbackProps> = ({ feedbackState, onClose }) => {
19
19
  const onPositiveFeedback = (data: boolean) => {
20
20
  feedbackSuccessEpic(state, data);
21
21
  if (data) {
22
- dispatch(feedbackSubmitPositive(""));
22
+ dispatch(feedbackSubmitPositive());
23
23
  } else {
24
- dispatch(feedbackNegative(""));
24
+ dispatch(feedbackNegative());
25
25
  }
26
26
  };
27
27
 
@@ -19,7 +19,7 @@ function FooterComponent(): JSX.Element {
19
19
  <Feedback
20
20
  feedbackState={feedbackState}
21
21
  onClose={() => {
22
- return dispatch(hideFeedback(""));
22
+ return dispatch(hideFeedback());
23
23
  }}
24
24
  />
25
25
  </>
@@ -1,17 +1,16 @@
1
1
  import React from "react";
2
2
  import { Container, Toolbar, Typography, AppBar } from "@material-ui/core";
3
- import { defaultMdSettings } from "defaults";
4
3
  import { useAppSelector } from "Store/Store";
4
+ import {MDSettings} from "../types";
5
5
  interface Props {
6
6
  settings: any;
7
7
  }
8
8
 
9
9
  function HeaderMdComponent(): JSX.Element {
10
- const { settings } = useAppSelector((state: any) => state);
10
+ const { settings } = useAppSelector((state) => state);
11
11
  const { themePage } = settings;
12
- const mdSettings: any = themePage.materialDesign.active
13
- ? themePage.materialDesign.materialDesign
14
- : defaultMdSettings;
12
+ const mdSettings = themePage.materialDesign as MDSettings;
13
+
15
14
  return (
16
15
  <AppBar
17
16
  position={"relative"}