Kaynağa Gözat

Block user page results and hide frontend checkbox for including user pages

arvid-e 2 ay önce
ebeveyn
işleme
f1451450d0

+ 24 - 18
apps/app/src/features/search/client/components/SearchPage/SearchControl.tsx

@@ -12,6 +12,7 @@ import SortControl from './SortControl';
 type Props = {
   isEnableSort: boolean;
   isEnableFilter: boolean;
+  isHidingUserPages: boolean;
   initialSearchConditions: Partial<ISearchConditions>;
 
   onSearchInvoked?: (
@@ -29,6 +30,7 @@ const SearchControl = React.memo((props: Props): JSX.Element => {
   const {
     isEnableSort,
     isEnableFilter,
+    isHidingUserPages,
     initialSearchConditions,
     onSearchInvoked,
     extraControls,
@@ -152,25 +154,29 @@ const SearchControl = React.memo((props: Props): JSX.Element => {
               </button>
             </div>
             <div className="d-none d-lg-flex align-items-center search-control-include-options">
-              <div className="px-2 py-1">
-                <div className="form-check form-check-succsess">
-                  <input
-                    className="form-check-input me-2"
-                    type="checkbox"
-                    id="flexCheckDefault"
-                    defaultChecked={includeUserPages}
-                    onChange={(e) =>
-                      changeIncludeUserPagesHandler(e.target.checked)
-                    }
-                  />
-                  <label
-                    className="form-label form-check-label mb-0 d-flex align-items-center text-secondary with-no-font-weight"
-                    htmlFor="flexCheckDefault"
-                  >
-                    {t('Include Subordinated Target Page', { target: '/user' })}
-                  </label>
+              {isHidingUserPages === false && (
+                <div className="px-2 py-1">
+                  <div className="form-check form-check-succsess">
+                    <input
+                      className="form-check-input me-2"
+                      type="checkbox"
+                      id="flexCheckDefault"
+                      defaultChecked={includeUserPages}
+                      onChange={(e) =>
+                        changeIncludeUserPagesHandler(e.target.checked)
+                      }
+                    />
+                    <label
+                      className="form-label form-check-label mb-0 d-flex align-items-center text-secondary with-no-font-weight"
+                      htmlFor="flexCheckDefault"
+                    >
+                      {t('Include Subordinated Target Page', {
+                        target: '/user',
+                      })}
+                    </label>
+                  </div>
                 </div>
-              </div>
+              )}
               <div className="px-2 py-1">
                 <div className="form-check form-check-succsess">
                   <input

+ 16 - 5
apps/app/src/features/search/client/components/SearchPage/SearchPage.tsx

@@ -17,6 +17,7 @@ import {
   type ISearchConfigurations,
   useSWRxSearch,
 } from '~/stores/search';
+import { useSWRxSecuritySettings } from '~/stores/security-settings';
 
 import { OperateAllControl } from './OperateAllControl';
 import SearchControl from './SearchControl';
@@ -106,6 +107,9 @@ export const SearchPage = (): JSX.Element => {
   const keyword = useSearchKeyword();
   const setSearchKeyword = useSetSearchKeyword();
 
+  const { data: generalSetting } = useSWRxSecuritySettings();
+  const isHidingUserPages = generalSetting?.isHidingUserPages ?? false;
+
   const [offset, setOffset] = useState<number>(0);
   const [limit, setLimit] = useState<number>(
     showPageLimitationL ?? INITIAL_PAGIONG_SIZE,
@@ -123,11 +127,16 @@ export const SearchPage = (): JSX.Element => {
     (ISelectableAll & IReturnSelectedPageIds) | null
   >(null);
 
-  const { data, conditions, mutate } = useSWRxSearch(keyword ?? '', null, {
-    ...configurationsByControl,
-    offset,
-    limit,
-  });
+  const { data, conditions, mutate } = useSWRxSearch(
+    keyword ?? '',
+    null,
+    {
+      ...configurationsByControl,
+      offset,
+      limit,
+    },
+    isHidingUserPages,
+  );
 
   const searchInvokedHandler = useCallback(
     (newKeyword: string, newConfigurations: Partial<ISearchConfigurations>) => {
@@ -286,6 +295,7 @@ export const SearchPage = (): JSX.Element => {
       <SearchControl
         isEnableSort
         isEnableFilter
+        isHidingUserPages={isHidingUserPages}
         initialSearchConditions={initialSearchConditions}
         onSearchInvoked={searchInvokedHandler}
         extraControls={extraControls}
@@ -298,6 +308,7 @@ export const SearchPage = (): JSX.Element => {
     collapseContents,
     initialSearchConditions,
     isCollapsed,
+    isHidingUserPages,
     searchInvokedHandler,
   ]);
 

+ 7 - 2
apps/app/src/stores/search.tsx

@@ -54,6 +54,7 @@ export const useSWRxSearch = (
   keyword: string | null,
   nqName: string | null,
   configurations: ISearchConfigurations,
+  isHidingUserPagesForced: boolean,
 ): SWRResponse<IFormattedSearchResult, Error> & {
   conditions: ISearchConditions;
 } => {
@@ -66,7 +67,9 @@ export const useSWRxSearch = (
     sort: sort ?? SORT_AXIS.RELATION_SCORE,
     order: order ?? SORT_ORDER.DESC,
     includeTrashPages: includeTrashPages ?? false,
-    includeUserPages: includeUserPages ?? false,
+    includeUserPages: isHidingUserPagesForced
+      ? false
+      : (includeUserPages ?? false),
   };
   const rawQuery = createSearchQuery(
     keyword ?? '',
@@ -77,7 +80,9 @@ export const useSWRxSearch = (
   const isKeywordValid = keyword != null && keyword.length > 0;
 
   const swrResult = useSWR(
-    isKeywordValid ? ['/search', keyword, fixedConfigurations] : null,
+    isKeywordValid
+      ? ['/search', keyword, fixedConfigurations, isHidingUserPagesForced]
+      : null,
     ([endpoint, , fixedConfigurations]) => {
       const { limit, offset, sort, order } = fixedConfigurations;