@plasmicpkgs/plasmic-sanity-io 1.0.91 → 1.0.93

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.
@@ -830,7 +830,10 @@ var sanityFetcherMeta = {
830
830
  type: "string",
831
831
  displayName: "GROQ",
832
832
  description: "Query in GROQ.",
833
- defaultValueHint: "*[_type == 'movie']"
833
+ defaultValueHint: "*[_type == 'movie']",
834
+ hidden: function hidden(props) {
835
+ return !!props.docType;
836
+ }
834
837
  },
835
838
  docType: {
836
839
  type: "choice",
@@ -839,7 +842,10 @@ var sanityFetcherMeta = {
839
842
  return (_ctx$docTypes = ctx == null ? void 0 : ctx.docTypes) != null ? _ctx$docTypes : [];
840
843
  },
841
844
  displayName: "Document type",
842
- description: "Document type to be queried (*[_type == DOC_TYPE] shortcut)."
845
+ description: "Document type to be queried (*[_type == DOC_TYPE] shortcut).",
846
+ hidden: function hidden(props) {
847
+ return !!props.groq;
848
+ }
843
849
  },
844
850
  filterField: {
845
851
  type: "choice",
@@ -850,13 +856,13 @@ var sanityFetcherMeta = {
850
856
  return (_ctx$sanityFields = ctx == null ? void 0 : ctx.sanityFields) != null ? _ctx$sanityFields : [];
851
857
  },
852
858
  hidden: function hidden(props, ctx) {
853
- return !props.docType && !props.groq;
859
+ return !props.docType;
854
860
  }
855
861
  },
856
862
  filterParameter: {
857
863
  type: "choice",
858
- displayName: "Filter Parameter",
859
- description: "Filter Parameter filter by.Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)",
864
+ displayName: "Filter Operation",
865
+ description: "Filter Option to filter by. Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)",
860
866
  options: function options(props, ctx) {
861
867
  var _ctx$queryOptions;
862
868
  return (_ctx$queryOptions = ctx == null ? void 0 : ctx.queryOptions) != null ? _ctx$queryOptions : [];
@@ -870,13 +876,16 @@ var sanityFetcherMeta = {
870
876
  displayName: "Filter value",
871
877
  description: "Value to filter by, should be of filter field type",
872
878
  hidden: function hidden(props, ctx) {
873
- return !props.filterParameter;
879
+ return !props.filterField;
874
880
  }
875
881
  },
876
882
  limit: {
877
883
  type: "string",
878
884
  displayName: "Limit",
879
- description: "Limit"
885
+ description: "Limit",
886
+ hidden: function hidden(props) {
887
+ return !props.docType;
888
+ }
880
889
  },
881
890
  noAutoRepeat: {
882
891
  type: "boolean",
@@ -910,14 +919,20 @@ function SanityFetcher(_ref2) {
910
919
  var dateRegex = new RegExp(/^\d{4}-\d{2}-\d{2}$/);
911
920
  var creds = ensure(useContext(CredentialsContext));
912
921
  if (!creds.projectId || !projectIdRegex.test(creds.projectId)) {
913
- return React.createElement("div", null, "Please specify a valid projectId, it can only contain only a-z, 0-9 and dashes.");
922
+ return React.createElement("div", {
923
+ className: className
924
+ }, "Please specify a valid projectId, it can only contain only a-z, 0-9 and dashes.");
914
925
  } else if (!creds.dataset || !datasetRegex.test(creds.dataset)) {
915
- return React.createElement("div", null, "Please specify a valid dataset, they can only contain lowercase characters, numbers, underscores and dashes, and start with tilde, and be maximum 64 characters.");
926
+ return React.createElement("div", {
927
+ className: className
928
+ }, "Please specify a valid dataset, they can only contain lowercase characters, numbers, underscores and dashes, and start with tilde, and be maximum 64 characters.");
916
929
  } else if (creds.apiVersion) {
917
930
  if (creds.apiVersion !== "v1" && creds.apiVersion !== "1" && creds.apiVersion !== "X") {
918
931
  var date = new Date(creds.apiVersion);
919
932
  if (!(dateRegex.test(creds.apiVersion) && date instanceof Date && date.getTime() > 0)) {
920
- return React.createElement("div", null, "Please specify a valid API version, expected `v1`, `1` or date in format `YYYY-MM-DD`.");
933
+ return React.createElement("div", {
934
+ className: className
935
+ }, "Please specify a valid API version, expected `v1`, `1` or date in format `YYYY-MM-DD`.");
921
936
  }
922
937
  }
923
938
  }
@@ -951,92 +966,88 @@ function SanityFetcher(_ref2) {
951
966
  }, _callee);
952
967
  })));
953
968
  var docTypes = (_allDataTypes$data = allDataTypes.data) != null ? _allDataTypes$data : false;
954
- if (!groq && docType) {
955
- groq = "*[_type=='" + docType + "'";
956
- }
957
- var cacheKey = JSON.stringify({
958
- docType: docType,
959
- filterField: filterField,
960
- filterValue: filterValue,
961
- filterParameter: filterParameter,
962
- limit: limit,
963
- groq: groq,
964
- creds: creds
965
- });
969
+ var hasFilter = !!docType && !!filterField && !!filterParameter && !!filterValue;
970
+ var generateUnfilteredGroq = function generateUnfilteredGroq() {
971
+ if (groq) {
972
+ console.log("ORIG GROQ", groq);
973
+ return groq;
974
+ } else if (docType) {
975
+ var query = "*[_type=='" + docType + "']";
976
+ if (hasFilter) {
977
+ // Ask for only a small sample, so we know how to generate the filter
978
+ query += "[0...10]";
979
+ } else if (limit) {
980
+ query += "[0..." + limit + "]";
981
+ }
982
+ console.log("UNFILTERED GROQ", query);
983
+ return query;
984
+ } else {
985
+ return null;
986
+ }
987
+ };
988
+ var unfilteredQuery = generateUnfilteredGroq();
966
989
  var sanity = makeSanityClient(creds);
967
- var _usePlasmicQueryData = usePlasmicQueryData(docType && groq ? cacheKey : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee2() {
968
- var query, resp;
990
+ var _usePlasmicQueryData = usePlasmicQueryData(unfilteredQuery ? JSON.stringify({
991
+ fullQuery: unfilteredQuery,
992
+ creds: creds
993
+ }) : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee2() {
969
994
  return runtime_1.wrap(function _callee2$(_context2) {
970
995
  while (1) {
971
996
  switch (_context2.prev = _context2.next) {
972
997
  case 0:
973
- if (groq) {
974
- _context2.next = 2;
975
- break;
976
- }
977
- return _context2.abrupt("return", null);
978
- case 2:
979
- if (limit) {
980
- query = groq + "][" + limit + "]";
981
- } else {
982
- query = groq + "]";
983
- }
984
- _context2.next = 5;
985
- return sanity.fetch(query);
986
- case 5:
987
- resp = _context2.sent;
988
- return _context2.abrupt("return", resp);
989
- case 7:
998
+ return _context2.abrupt("return", sanity.fetch(unfilteredQuery));
999
+ case 1:
990
1000
  case "end":
991
1001
  return _context2.stop();
992
1002
  }
993
1003
  }
994
1004
  }, _callee2);
995
1005
  }))),
996
- response = _usePlasmicQueryData.data;
997
- var _usePlasmicQueryData2 = usePlasmicQueryData(groq && filterField && filterValue && filterParameter && response ? cacheKey + "/filtered" : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee3() {
998
- var query, matched, resp;
1006
+ unfilteredData = _usePlasmicQueryData.data;
1007
+ var generateFilteredQuery = function generateFilteredQuery() {
1008
+ if (!hasFilter || !unfilteredData) {
1009
+ return null;
1010
+ }
1011
+ var fieldValues = Object.values(unfilteredData).flatMap(function (model) {
1012
+ return Array.isArray(model) ? model : [model];
1013
+ }).map(function (item) {
1014
+ var field = Object.entries(item).find(function (el) {
1015
+ return el[0] === filterField;
1016
+ });
1017
+ return field == null ? void 0 : field[1];
1018
+ });
1019
+ var query = "*[_type=='" + docType + "'";
1020
+ if (fieldValues.some(function (v) {
1021
+ return typeof v === "string";
1022
+ })) {
1023
+ query = query + " && " + filterField + " " + filterParameter + " \"" + filterValue + "\"";
1024
+ } else {
1025
+ query = query + " && " + filterField + " " + filterParameter + " " + filterValue;
1026
+ }
1027
+ if (limit) {
1028
+ query = query + "][0..." + limit + "]";
1029
+ } else {
1030
+ query = query + "]";
1031
+ }
1032
+ console.log("FILTERED GROQ", query);
1033
+ return query;
1034
+ };
1035
+ var filteredQuery = generateFilteredQuery();
1036
+ var _usePlasmicQueryData2 = usePlasmicQueryData(filteredQuery ? JSON.stringify({
1037
+ filteredQuery: filteredQuery,
1038
+ creds: creds
1039
+ }) : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee3() {
1040
+ var resp;
999
1041
  return runtime_1.wrap(function _callee3$(_context3) {
1000
1042
  while (1) {
1001
1043
  switch (_context3.prev = _context3.next) {
1002
1044
  case 0:
1003
- if (!(!docType && !filterField && !filterValue && !filterParameter && !response)) {
1004
- _context3.next = 2;
1005
- break;
1006
- }
1007
- return _context3.abrupt("return", null);
1045
+ _context3.next = 2;
1046
+ return sanity.fetch(filteredQuery);
1008
1047
  case 2:
1009
- if (response) {
1010
- _context3.next = 4;
1011
- break;
1012
- }
1013
- return _context3.abrupt("return", null);
1014
- case 4:
1015
- matched = Object.values(response).flatMap(function (model) {
1016
- return Array.isArray(model) ? model : [model];
1017
- }).map(function (item) {
1018
- var fields = Object.entries(item).find(function (el) {
1019
- return el[0] === filterField;
1020
- });
1021
- return fields;
1022
- });
1023
- Object.values(matched).map(function (model) {
1024
- return Array.isArray(model) ? model : [model];
1025
- }).map(function (item) {
1026
- if (typeof item[1] === "number" && typeof item[1] !== "object") {
1027
- query = groq + " && " + filterField + " " + filterParameter + " " + filterValue + "]";
1028
- } else if (typeof item[1] !== "number" && typeof item[1] !== "object" && typeof item[1] === "string") {
1029
- query = groq + " && " + filterField + " " + filterParameter + " \"" + filterValue + "\"]";
1030
- } else {
1031
- query = groq + " && " + filterField + " " + filterParameter + " " + filterValue + "]";
1032
- }
1033
- });
1034
- _context3.next = 8;
1035
- return sanity.fetch(query);
1036
- case 8:
1037
1048
  resp = _context3.sent;
1038
1049
  return _context3.abrupt("return", resp);
1039
- case 10:
1050
+ case 4:
1040
1051
  case "end":
1041
1052
  return _context3.stop();
1042
1053
  }
@@ -1045,15 +1056,24 @@ function SanityFetcher(_ref2) {
1045
1056
  }))),
1046
1057
  filteredData = _usePlasmicQueryData2.data;
1047
1058
  if (!docTypes) {
1048
- return React.createElement("div", null, "Please configure the Sanity provider with a valid projectId, dataset, and token (if necessary). Don't forget to add 'https://host.plasmicdev.com' as an authorized host on the CORS origins section of your project.");
1059
+ return React.createElement("div", {
1060
+ className: className
1061
+ }, "Please configure the Sanity provider with a valid projectId, dataset, and token (if necessary). Don't forget to add 'https://host.plasmicdev.com' as an authorized host on the CORS origins section of your project.");
1049
1062
  }
1050
1063
  setControlContextData == null ? void 0 : setControlContextData({
1051
1064
  docTypes: docTypes
1052
1065
  });
1053
- if (!response) {
1054
- return React.createElement("div", null, "Please specify a valid GROQ query or select a Document type.");
1066
+ if (!groq && !docType) {
1067
+ return React.createElement("div", {
1068
+ className: className
1069
+ }, "Please specify a valid GROQ query or select a Document type.");
1055
1070
  }
1056
- var sanityFields = response.map(function (item) {
1071
+ if (!unfilteredData) {
1072
+ return React.createElement("div", {
1073
+ className: className
1074
+ }, "Loading...");
1075
+ }
1076
+ var sanityFields = unfilteredData.map(function (item) {
1057
1077
  var fields = Object.keys(item).filter(function (field) {
1058
1078
  var value = get(item, field);
1059
1079
  return typeof value !== "object" && value._type !== "image" && typeof value === "number" || typeof value === "string" && !value.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/);
@@ -1061,7 +1081,7 @@ function SanityFetcher(_ref2) {
1061
1081
  return fields;
1062
1082
  });
1063
1083
  var operators;
1064
- var matchedFields = Object.values(response).flatMap(function (model) {
1084
+ var matchedFields = Object.values(unfilteredData).flatMap(function (model) {
1065
1085
  return Array.isArray(model) ? model : [model];
1066
1086
  }).map(function (item) {
1067
1087
  var fields = Object.entries(item).find(function (el) {
@@ -1077,10 +1097,10 @@ function SanityFetcher(_ref2) {
1077
1097
  } else if (typeof item[1] !== "number" && typeof item[1] !== "object" && typeof item[1] === "string") {
1078
1098
  operators = [{
1079
1099
  value: "==",
1080
- label: "Equality"
1100
+ label: "Equals"
1081
1101
  }, {
1082
1102
  value: "!=",
1083
- label: "Inequality"
1103
+ label: "Not equals"
1084
1104
  }];
1085
1105
  }
1086
1106
  });
@@ -1089,65 +1109,48 @@ function SanityFetcher(_ref2) {
1089
1109
  docTypes: docTypes,
1090
1110
  sanityFields: sanityFields[0]
1091
1111
  });
1092
- if (filterField && !filterParameter && !filterValue) {
1093
- return React.createElement("div", null, "Please specify a Filter Parameter and a Filter Value");
1094
- }
1095
- if (filterField && filterParameter && !filterValue) {
1096
- return React.createElement("div", null, "Please specify a Filter Value");
1097
- }
1098
- if (!filterField && !filterParameter && filterValue) {
1099
- return React.createElement("div", null, "Please specify a Filter Field and a Filter Parameter");
1112
+ if (hasFilter) {
1113
+ if (!filterParameter) {
1114
+ return React.createElement("div", {
1115
+ className: className
1116
+ }, "Please specify a filter operation");
1117
+ }
1118
+ if (!filterValue) {
1119
+ return React.createElement("div", {
1120
+ className: className
1121
+ }, "Please specify a filter value");
1122
+ }
1100
1123
  }
1101
- if (!filterField && filterParameter && !filterValue) {
1102
- return React.createElement("div", null, "Please specify a Filter Field and a Filter Value");
1124
+ if (hasFilter && !filteredData) {
1125
+ return React.createElement("div", {
1126
+ className: className
1127
+ }, "Loading...");
1103
1128
  }
1104
- var repElements;
1129
+ var resultData = hasFilter ? filteredData : unfilteredData;
1105
1130
  var imageBuilder = imageUrlBuilder(sanity);
1106
- if (filteredData) {
1107
- if (filteredData.length === 0) {
1108
- return React.createElement("div", null, "No published types found");
1109
- }
1110
- repElements = filteredData.map(function (item, index) {
1111
- Object.keys(item).forEach(function (field) {
1112
- if (item[field]._type === "image") {
1113
- item[field].imgUrl = imageBuilder.image(item[field]).ignoreImageParams().toString();
1114
- }
1115
- });
1116
- return React.createElement(DataProvider, {
1117
- key: item._id,
1118
- name: "sanityItem",
1119
- data: item,
1120
- hidden: true
1121
- }, React.createElement(DataProvider, {
1122
- name: makeDataProviderName(docType),
1123
- data: item
1124
- }, repeatedElement(index, children)));
1125
- });
1126
- } else {
1127
- repElements = noAutoRepeat ? children : response.map(function (item, index) {
1128
- Object.keys(item).forEach(function (field) {
1129
- if (item[field]._type === "image") {
1130
- item[field].imgUrl = imageBuilder.image(item[field]).ignoreImageParams().toString();
1131
- }
1132
- });
1133
- return docType ? React.createElement(DataProvider, {
1134
- key: item._id,
1135
- name: "sanityItem",
1136
- data: item,
1137
- hidden: true
1138
- }, React.createElement(DataProvider, {
1139
- name: makeDataProviderName(docType),
1140
- data: item
1141
- }, repeatedElement(index, children))) : React.createElement(DataProvider, {
1142
- key: item._id,
1143
- name: "sanityItem",
1144
- data: item
1145
- }, repeatedElement(index, children));
1131
+ var repElements = noAutoRepeat ? children : resultData.map(function (item, index) {
1132
+ Object.keys(item).forEach(function (field) {
1133
+ if (item[field]._type === "image") {
1134
+ item[field].imgUrl = imageBuilder.image(item[field]).ignoreImageParams().toString();
1135
+ }
1146
1136
  });
1147
- }
1137
+ return docType ? React.createElement(DataProvider, {
1138
+ key: item._id,
1139
+ name: "sanityItem",
1140
+ data: item,
1141
+ hidden: true
1142
+ }, React.createElement(DataProvider, {
1143
+ name: makeDataProviderName(docType),
1144
+ data: item
1145
+ }, repeatedElement(index, children))) : React.createElement(DataProvider, {
1146
+ key: item._id,
1147
+ name: "sanityItem",
1148
+ data: item
1149
+ }, repeatedElement(index, children));
1150
+ });
1148
1151
  return React.createElement(DataProvider, {
1149
1152
  name: "sanityItems",
1150
- data: response
1153
+ data: resultData
1151
1154
  }, noLayout ? React.createElement(React.Fragment, null, " ", repElements, " ") : React.createElement("div", {
1152
1155
  className: className
1153
1156
  }, " ", repElements, " "));