Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/client/components/center/search/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from "./search.service";
export * from "./search";
41 changes: 41 additions & 0 deletions src/client/components/center/search/search.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { makeAutoObservable } from "mobx";

import { CentralViewType } from "@/client/constants";
import { ICentralPanelContentService } from "@/client/interface";
import { DomainManager } from "@/domain";

import { EntrySearchService } from "../../shared/entry-search-field";

export class SearchService implements ICentralPanelContentService {
entrySearch: EntrySearchService;

constructor(domain: DomainManager) {
this.entrySearch = new EntrySearchService(domain);

makeAutoObservable(this, { entrySearch: false });
}

get key() {
return this.type;
}

get type() {
return CentralViewType.Search;
}

get details() {
return { type: this.type };
}

load() {
return;
}

activate() {
return;
}

cleanUp() {
return;
}
}
24 changes: 24 additions & 0 deletions src/client/components/center/search/search.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Box, Title } from "@mantine/core";
import { observer } from "mobx-react-lite";

import { DIVIDER, SPACE } from "@/shared/common";

import { SearchService } from "./search.service";
import { EntrySearchField } from "../../shared/entry-search-field";

interface SearchProps {
service: SearchService;
}

function renderSearch({ service }: SearchProps) {
return (
<Box className="search">
<Title order={1}>Search Results</Title>
{DIVIDER}
{SPACE}
<EntrySearchField service={service.entrySearch} />
</Box>
);
}

export const Search = observer(renderSearch);
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ export class EntrySearchService {
});
}

get enabled() {
return this._domain.hasProject;
}

get searchQuery() {
return this._searchQuery;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ interface EntrySearchProps {
function renderEntrySearchField({ service }: EntrySearchProps) {
return (
<SearchField
disabled={!service.enabled}
onValueChange={(value) => service.selectEntrySearchResult(value)}
getSearch={() => service.searchQuery}
onSearchChange={(value) => (service.searchQuery = value)}
Expand Down
1 change: 1 addition & 0 deletions src/client/constants/view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export enum ViewAction {
export enum CentralViewType {
Home = "HOME",
Settings = "SETTINGS",
Search = "SEARCH",
EntryEditor = "ENTRY_EDITOR",
}

Expand Down
3 changes: 3 additions & 0 deletions src/shared/search-field/search-field.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export interface SearchFieldProps extends ComboboxProps {

function renderSearchField({
placeholder = "Search",
disabled = false,
value,
getValue,
search,
Expand Down Expand Up @@ -72,6 +73,7 @@ function renderSearchField({
return (
<Combobox
store={combobox}
disabled={disabled}
onOptionSubmit={(value, props) => {
onSearchChange?.(props.children?.toString() ?? "");
onValueChange?.(value);
Expand All @@ -81,6 +83,7 @@ function renderSearchField({
>
<Combobox.Target>
<InputBase
disabled={disabled}
placeholder={placeholder}
value={_search}
onChange={(event) => {
Expand Down