@creopse/react 0.0.11 → 0.0.13

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.
@@ -1,5 +1,5 @@
1
1
  import { usePage, router } from "@inertiajs/react";
2
- import React__default, { createContext, useContext, useMemo, useCallback } from "react";
2
+ import React__default, { createContext, useContext, useMemo, useCallback, useState, useEffect } from "react";
3
3
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
4
4
  function getDefaultExportFromCjs(x) {
5
5
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
@@ -6933,6 +6933,28 @@ const useApi = () => {
6933
6933
  handleError
6934
6934
  };
6935
6935
  };
6936
+ const useProps = () => {
6937
+ const manager = useContext(PropsContext);
6938
+ const page = usePage();
6939
+ const [props, setProps] = useState(
6940
+ manager ? manager.getState().props : {}
6941
+ );
6942
+ useEffect(() => {
6943
+ if (!manager) return;
6944
+ setProps(manager.getState().props);
6945
+ const unsubscribe = manager.subscribe((newProps) => {
6946
+ setProps(newProps);
6947
+ });
6948
+ return unsubscribe;
6949
+ }, [manager]);
6950
+ if (!manager) {
6951
+ console.warn(
6952
+ "[@creopse/react] Using native Inertia props - live preview disabled"
6953
+ );
6954
+ return page.props;
6955
+ }
6956
+ return props;
6957
+ };
6936
6958
  const useMediaQuery = (query) => {
6937
6959
  const [matches, setMatches] = React__default.useState(false);
6938
6960
  React__default.useEffect(() => {
@@ -6947,6 +6969,7 @@ const useMediaQuery = (query) => {
6947
6969
  return matches;
6948
6970
  };
6949
6971
  const useHelper = () => {
6972
+ const props = useProps();
6950
6973
  const page = usePage();
6951
6974
  const { request } = useApi();
6952
6975
  const { apiBaseUrl, langKey } = useConfig();
@@ -7081,15 +7104,15 @@ const useHelper = () => {
7081
7104
  const updateLang = useCallback(
7082
7105
  async (val, reload = true, updateUserPrefs = true) => {
7083
7106
  localStorage.setItem(langKey, val);
7084
- if (page.props.isUserLoggedIn && updateUserPrefs) {
7085
- const userPrefs = page.props.userData?.preferences || {
7107
+ if (props.isUserLoggedIn && updateUserPrefs) {
7108
+ const userPrefs = props.userData?.preferences || {
7086
7109
  inAppNotifEnabled: Bool.TRUE,
7087
7110
  emailNotifEnabled: Bool.TRUE,
7088
7111
  locale: val
7089
7112
  };
7090
7113
  userPrefs.locale = val;
7091
7114
  await request({
7092
- url: `/users/self/${page.props.userData?.id}`,
7115
+ url: `/users/self/${props.userData?.id}`,
7093
7116
  method: "put",
7094
7117
  data: {
7095
7118
  preferences: userPrefs
@@ -7098,7 +7121,7 @@ const useHelper = () => {
7098
7121
  }
7099
7122
  if (reload) location.reload();
7100
7123
  },
7101
- [langKey, page.props, request]
7124
+ [langKey, props, request]
7102
7125
  );
7103
7126
  const displayFormErrors = useCallback(
7104
7127
  (errors, displayError) => {
@@ -7780,15 +7803,336 @@ function requireLodash_clonedeep() {
7780
7803
  }
7781
7804
  var lodash_clonedeepExports = requireLodash_clonedeep();
7782
7805
  const cloneDeep = /* @__PURE__ */ getDefaultExportFromCjs(lodash_clonedeepExports);
7806
+ const useContent = () => {
7807
+ const { request } = useApi();
7808
+ const { fileUrl } = useHelper();
7809
+ const props = useProps();
7810
+ const page = usePage();
7811
+ const pageData = useMemo(
7812
+ () => props.pageData,
7813
+ [props.pageData]
7814
+ );
7815
+ const newsArticle = useMemo(
7816
+ () => props.article,
7817
+ [props.article]
7818
+ );
7819
+ const newsCategory = useMemo(
7820
+ () => props.category,
7821
+ [props.category]
7822
+ );
7823
+ const newsTag = useMemo(
7824
+ () => props.tag,
7825
+ [props.tag]
7826
+ );
7827
+ const contentModelItem = useMemo(
7828
+ () => props.contentModelItem,
7829
+ [props.contentModelItem]
7830
+ );
7831
+ const getSectionData = useCallback(
7832
+ (key) => {
7833
+ if (!key) return null;
7834
+ const keyParts = key.split("__");
7835
+ const slug = keyParts.length ? keyParts[0] : "";
7836
+ const linkId = keyParts.length > 1 ? keyParts[1] : "";
7837
+ return props.pageData?.sections?.find(
7838
+ (section) => section.slug === slug && section.pivot?.linkId === linkId
7839
+ )?.pivot?.data || null;
7840
+ },
7841
+ [props.pageData?.sections]
7842
+ );
7843
+ const getSectionRootData = useCallback(
7844
+ (key) => getSectionData(key)?.index,
7845
+ [getSectionData]
7846
+ );
7847
+ const getSectionSettings = useCallback(
7848
+ (key) => {
7849
+ if (!key) return null;
7850
+ const keyParts = key.split("__");
7851
+ const slug = keyParts.length ? keyParts[0] : "";
7852
+ const linkId = keyParts.length > 1 ? keyParts[1] : "";
7853
+ return props.pageData?.sections?.find(
7854
+ (section) => section.slug === slug && section.pivot?.linkId === linkId
7855
+ )?.pivot?.settings || null;
7856
+ },
7857
+ [props.pageData?.sections]
7858
+ );
7859
+ const getSectionSettingsGroup = useCallback(
7860
+ (key, group) => {
7861
+ const settings = getSectionSettings(key);
7862
+ return settings?.[group];
7863
+ },
7864
+ [getSectionSettings]
7865
+ );
7866
+ const getSectionSetting = useCallback(
7867
+ (key, group, name) => {
7868
+ const settings = getSectionSettingsGroup(key, group);
7869
+ return settings?.[name];
7870
+ },
7871
+ [getSectionSettingsGroup]
7872
+ );
7873
+ const getAnySectionData = useCallback(
7874
+ async (sectionSlug, pageSlug, linkId = "default") => {
7875
+ const task = await request({
7876
+ url: `section-data/${sectionSlug}/source/${pageSlug}/link/${linkId}`
7877
+ });
7878
+ if (task.success && task.result) {
7879
+ return task.result.data;
7880
+ }
7881
+ return null;
7882
+ },
7883
+ [request]
7884
+ );
7885
+ const getContentModel = useCallback(
7886
+ (name) => {
7887
+ return props?.contentModels?.find(
7888
+ (contentModel) => contentModel.name === name
7889
+ );
7890
+ },
7891
+ [props?.contentModels]
7892
+ );
7893
+ const formatContentModelItemData = useCallback(
7894
+ (item) => {
7895
+ const { index: _, ...rest } = item.contentModelData;
7896
+ return {
7897
+ ...item,
7898
+ data: {
7899
+ ...item.contentModelData?.index,
7900
+ ...rest
7901
+ }
7902
+ };
7903
+ },
7904
+ []
7905
+ );
7906
+ const getContentModelItems = useCallback(
7907
+ async (name, filterByIsActive = true) => {
7908
+ const task = await request({
7909
+ url: `content-model/items?contentModelName=${name}${filterByIsActive ? "&isActive=true" : ""}`
7910
+ });
7911
+ if (task.success && task.result) {
7912
+ return (task.result.data || []).map(
7913
+ (item) => formatContentModelItemData(item)
7914
+ );
7915
+ }
7916
+ return [];
7917
+ },
7918
+ [request, formatContentModelItemData]
7919
+ );
7920
+ const getPaginatedContentModelItems = useCallback(
7921
+ async (name, pageSize, filterByIsActive = true) => {
7922
+ const task = await request({
7923
+ url: `content-model/items?pageSize=${pageSize}&contentModelName=${name}${filterByIsActive ? "&isActive=true" : ""}`
7924
+ });
7925
+ if (task.success && task.result) {
7926
+ const items = (task.result.data?.items || []).map(
7927
+ (item) => formatContentModelItemData(item)
7928
+ );
7929
+ const total = task.result.data?.meta?.total || 0;
7930
+ const currentPage = task.result.data?.meta?.currentPage || 1;
7931
+ return {
7932
+ items,
7933
+ total,
7934
+ currentPage
7935
+ };
7936
+ }
7937
+ return {
7938
+ items: [],
7939
+ total: 0,
7940
+ currentPage: 1
7941
+ };
7942
+ },
7943
+ [request, formatContentModelItemData]
7944
+ );
7945
+ const getMenu = useCallback(
7946
+ (name, filterByIsActive = true) => {
7947
+ const menu = props?.menus?.find((menu2) => menu2.name === name);
7948
+ if (menu) {
7949
+ menu.items = cloneDeep(
7950
+ menu.items?.filter((item) => !filterByIsActive || item.isActive)?.sort((a, b) => a.position - b.position)
7951
+ );
7952
+ }
7953
+ return menu;
7954
+ },
7955
+ [props?.menus]
7956
+ );
7957
+ const getMenuByLocation = useCallback(
7958
+ (name, filterByIsActive = true) => {
7959
+ const menu = props?.menus?.find((menu2) => menu2.location?.name === name);
7960
+ if (menu) {
7961
+ menu.items = cloneDeep(
7962
+ menu.items?.filter((item) => !filterByIsActive || item.isActive)?.sort((a, b) => a.position - b.position)
7963
+ );
7964
+ }
7965
+ return menu;
7966
+ },
7967
+ [props?.menus]
7968
+ );
7969
+ const getMenuItems = useCallback(
7970
+ (name, filterByIsVisible = true) => {
7971
+ return getMenu(name)?.items?.filter((item) => !filterByIsVisible || item.isVisible)?.sort((a, b) => a.position - b.position);
7972
+ },
7973
+ [getMenu]
7974
+ );
7975
+ const getMenuItemById = useCallback(
7976
+ (id) => {
7977
+ const menuItems = [];
7978
+ const menus = props?.menus || [];
7979
+ menus.forEach((menu) => {
7980
+ if (Array.isArray(menu.items)) menuItems.push(...menu.items);
7981
+ });
7982
+ return menuItems.find((item) => item.id === id);
7983
+ },
7984
+ [props?.menus]
7985
+ );
7986
+ const getMenuItemsByLocation = useCallback(
7987
+ (name, filterByIsVisible = true) => {
7988
+ return getMenuByLocation(name)?.items?.filter((item) => !filterByIsVisible || item.isVisible)?.sort((a, b) => a.position - b.position);
7989
+ },
7990
+ [getMenuByLocation]
7991
+ );
7992
+ const getMenuGroups = useCallback(
7993
+ (name, byLocation = false, filterByIsVisible = true) => {
7994
+ const groups = [];
7995
+ const items = byLocation ? getMenuItemsByLocation(name, filterByIsVisible) : getMenuItems(name, filterByIsVisible);
7996
+ if (items) {
7997
+ for (const item of items) {
7998
+ const groupAlreadyExists = groups.find(
7999
+ (group) => group.id === item.menuItemGroupId
8000
+ );
8001
+ if (!groupAlreadyExists) {
8002
+ const group = props?.menuItemGroups?.find(
8003
+ (group2) => group2.id === item.menuItemGroupId
8004
+ );
8005
+ if (group) groups.push(group);
8006
+ }
8007
+ }
8008
+ }
8009
+ return groups;
8010
+ },
8011
+ [getMenuItems, getMenuItemsByLocation, props?.menuItemGroups]
8012
+ );
8013
+ const getMenuItemsByGroup = useCallback(
8014
+ (name, groupId, byLocation = false, filterByIsVisible = true) => {
8015
+ const items = byLocation ? getMenuItemsByLocation(name, filterByIsVisible) : getMenuItems(name, filterByIsVisible);
8016
+ return items?.filter((item) => item.menuItemGroupId === groupId);
8017
+ },
8018
+ [getMenuItems, getMenuItemsByLocation]
8019
+ );
8020
+ const getMenuGroupedItems = useCallback(
8021
+ (name, byLocation = false, filterByIsVisible = true) => {
8022
+ const groups = getMenuGroups(name, byLocation);
8023
+ return groups.map((group) => ({
8024
+ group,
8025
+ items: getMenuItemsByGroup(
8026
+ name,
8027
+ group.id || 0,
8028
+ byLocation,
8029
+ filterByIsVisible
8030
+ )
8031
+ }));
8032
+ },
8033
+ [getMenuGroups, getMenuItemsByGroup]
8034
+ );
8035
+ const getMenuUngroupedItems = useCallback(
8036
+ (name, byLocation = false, filterByIsVisible = true) => {
8037
+ const items = byLocation ? getMenuItemsByLocation(name, filterByIsVisible) : getMenuItems(name, filterByIsVisible);
8038
+ return items?.filter((item) => !item.menuItemGroupId);
8039
+ },
8040
+ [getMenuItems, getMenuItemsByLocation]
8041
+ );
8042
+ const getAppInformationValue = useCallback(
8043
+ (key, type = "string") => {
8044
+ const appInformation = props.appInformation;
8045
+ const setting = appInformation.find((s) => s.key === key);
8046
+ let value = "";
8047
+ switch (type) {
8048
+ case "number":
8049
+ value = setting && parseInt(setting.value) && !isNaN(parseInt(setting.value)) ? parseInt(setting.value) : 0;
8050
+ break;
8051
+ case "boolean":
8052
+ value = setting && !isNaN(parseInt(setting.value)) && parseInt(setting.value) > 0;
8053
+ break;
8054
+ case "object":
8055
+ value = setting && setting.value ? JSON.parse(setting.value) : {};
8056
+ break;
8057
+ case "array":
8058
+ value = setting && setting.value ? JSON.parse(setting.value) : [];
8059
+ break;
8060
+ default:
8061
+ value = setting && setting.value ? setting.value : "";
8062
+ break;
8063
+ }
8064
+ return value;
8065
+ },
8066
+ [props.appInformation]
8067
+ );
8068
+ const appPrimaryColor = useMemo(() => {
8069
+ const primaryColor = getAppInformationValue(
8070
+ "primaryColor"
8071
+ );
8072
+ return primaryColor || "#005B97";
8073
+ }, [getAppInformationValue]);
8074
+ const appSecondaryColor = useMemo(() => {
8075
+ const secondaryColor = getAppInformationValue(
8076
+ "secondaryColor"
8077
+ );
8078
+ return secondaryColor || "#1E9CD7";
8079
+ }, [getAppInformationValue]);
8080
+ const appAccentColor = useMemo(() => {
8081
+ const accentColor = getAppInformationValue("accentColor");
8082
+ return accentColor || "#FF6501";
8083
+ }, [getAppInformationValue]);
8084
+ const icon = useMemo(() => {
8085
+ const icon2 = getAppInformationValue("icon");
8086
+ return fileUrl(icon2) || "";
8087
+ }, [getAppInformationValue, fileUrl]);
8088
+ const logo = useMemo(() => {
8089
+ const logo2 = getAppInformationValue("logo");
8090
+ return fileUrl(logo2) || "";
8091
+ }, [getAppInformationValue, fileUrl]);
8092
+ return {
8093
+ logo,
8094
+ icon,
8095
+ page,
8096
+ pageData,
8097
+ newsArticle,
8098
+ newsCategory,
8099
+ newsTag,
8100
+ contentModelItem,
8101
+ getMenu,
8102
+ getMenuByLocation,
8103
+ getMenuItems,
8104
+ getMenuItemById,
8105
+ getMenuItemsByLocation,
8106
+ getMenuGroups,
8107
+ getMenuItemsByGroup,
8108
+ getMenuGroupedItems,
8109
+ getMenuUngroupedItems,
8110
+ getSectionData,
8111
+ getSectionSettings,
8112
+ getSectionSettingsGroup,
8113
+ getSectionSetting,
8114
+ getAnySectionData,
8115
+ getSectionRootData,
8116
+ getContentModel,
8117
+ getContentModelItems,
8118
+ getPaginatedContentModelItems,
8119
+ getAppInformationValue,
8120
+ appAccentColor,
8121
+ appPrimaryColor,
8122
+ appSecondaryColor
8123
+ };
8124
+ };
7783
8125
  export {
7784
8126
  ConfigContext as C,
7785
8127
  EditorMessageType as E,
7786
8128
  PropsContext as P,
7787
- RouterContext as R,
7788
- ResolveSectionsContext as a,
7789
- useApi as b,
8129
+ ResolveSectionsContext as R,
8130
+ useContent as a,
8131
+ useProps as b,
7790
8132
  cloneDeep as c,
7791
- useConfig as d,
8133
+ RouterContext as d,
8134
+ useApi as e,
8135
+ useConfig as f,
7792
8136
  slideToId as s,
7793
8137
  useHelper as u
7794
8138
  };