@plasmicpkgs/plasmic-sanity-io 1.0.92 → 1.0.94

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,12 @@ 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
+ // Hide this if there's no groq, AND there's docType, so we're in
835
+ // "docType" mode
836
+ hidden: function hidden(props) {
837
+ return !props.groq && !!props.docType;
838
+ }
834
839
  },
835
840
  docType: {
836
841
  type: "choice",
@@ -839,7 +844,11 @@ var sanityFetcherMeta = {
839
844
  return (_ctx$docTypes = ctx == null ? void 0 : ctx.docTypes) != null ? _ctx$docTypes : [];
840
845
  },
841
846
  displayName: "Document type",
842
- description: "Document type to be queried (*[_type == DOC_TYPE] shortcut)."
847
+ description: "Document type to be queried (*[_type == DOC_TYPE] shortcut).",
848
+ // Hide this if groq is specified, as groq always takes precedence
849
+ hidden: function hidden(props) {
850
+ return !!props.groq;
851
+ }
843
852
  },
844
853
  filterField: {
845
854
  type: "choice",
@@ -849,34 +858,42 @@ var sanityFetcherMeta = {
849
858
  var _ctx$sanityFields;
850
859
  return (_ctx$sanityFields = ctx == null ? void 0 : ctx.sanityFields) != null ? _ctx$sanityFields : [];
851
860
  },
861
+ // Hide this if there's groq (so we're just using groq), or if there's
862
+ // no docType selected yet
852
863
  hidden: function hidden(props, ctx) {
853
- return !props.docType && !props.groq;
864
+ return !!props.groq || !props.docType;
854
865
  }
855
866
  },
856
867
  filterParameter: {
857
868
  type: "choice",
858
- displayName: "Filter Parameter",
859
- description: "Filter Parameter filter by.Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)",
869
+ displayName: "Filter Operation",
870
+ description: "Filter Option to filter by. Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)",
860
871
  options: function options(props, ctx) {
861
872
  var _ctx$queryOptions;
862
873
  return (_ctx$queryOptions = ctx == null ? void 0 : ctx.queryOptions) != null ? _ctx$queryOptions : [];
863
874
  },
875
+ // Hide if in groq mode, or if no filter field is selected yet
864
876
  hidden: function hidden(props, ctx) {
865
- return !props.filterField;
877
+ return !!props.groq || !props.filterField;
866
878
  }
867
879
  },
868
880
  filterValue: {
869
881
  type: "string",
870
882
  displayName: "Filter value",
871
883
  description: "Value to filter by, should be of filter field type",
884
+ // Hide if in groq mode, or if no filter field is selected yet
872
885
  hidden: function hidden(props, ctx) {
873
- return !props.filterParameter;
886
+ return !!props.groq || !props.filterField;
874
887
  }
875
888
  },
876
889
  limit: {
877
890
  type: "string",
878
891
  displayName: "Limit",
879
- description: "Limit"
892
+ description: "Limit",
893
+ // Hide if in groq mode
894
+ hidden: function hidden(props) {
895
+ return !!props.groq || !props.docType;
896
+ }
880
897
  },
881
898
  noAutoRepeat: {
882
899
  type: "boolean",
@@ -910,14 +927,20 @@ function SanityFetcher(_ref2) {
910
927
  var dateRegex = new RegExp(/^\d{4}-\d{2}-\d{2}$/);
911
928
  var creds = ensure(useContext(CredentialsContext));
912
929
  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.");
930
+ return React.createElement("div", {
931
+ className: className
932
+ }, "Please specify a valid projectId, it can only contain only a-z, 0-9 and dashes.");
914
933
  } 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.");
934
+ return React.createElement("div", {
935
+ className: className
936
+ }, "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
937
  } else if (creds.apiVersion) {
917
938
  if (creds.apiVersion !== "v1" && creds.apiVersion !== "1" && creds.apiVersion !== "X") {
918
939
  var date = new Date(creds.apiVersion);
919
940
  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`.");
941
+ return React.createElement("div", {
942
+ className: className
943
+ }, "Please specify a valid API version, expected `v1`, `1` or date in format `YYYY-MM-DD`.");
921
944
  }
922
945
  }
923
946
  }
@@ -951,92 +974,88 @@ function SanityFetcher(_ref2) {
951
974
  }, _callee);
952
975
  })));
953
976
  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
- });
977
+ var hasFilter = !!docType && !!filterField && !!filterParameter && !!filterValue;
978
+ var generateUnfilteredGroq = function generateUnfilteredGroq() {
979
+ if (groq) {
980
+ console.log("ORIG GROQ", groq);
981
+ return groq;
982
+ } else if (docType) {
983
+ var query = "*[_type=='" + docType + "']";
984
+ if (hasFilter) {
985
+ // Ask for only a small sample, so we know how to generate the filter
986
+ query += "[0...10]";
987
+ } else if (limit) {
988
+ query += "[0..." + limit + "]";
989
+ }
990
+ console.log("UNFILTERED GROQ", query);
991
+ return query;
992
+ } else {
993
+ return null;
994
+ }
995
+ };
996
+ var unfilteredQuery = generateUnfilteredGroq();
966
997
  var sanity = makeSanityClient(creds);
967
- var _usePlasmicQueryData = usePlasmicQueryData(docType && groq ? cacheKey : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee2() {
968
- var query, resp;
998
+ var _usePlasmicQueryData = usePlasmicQueryData(unfilteredQuery ? JSON.stringify({
999
+ fullQuery: unfilteredQuery,
1000
+ creds: creds
1001
+ }) : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee2() {
969
1002
  return runtime_1.wrap(function _callee2$(_context2) {
970
1003
  while (1) {
971
1004
  switch (_context2.prev = _context2.next) {
972
1005
  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:
1006
+ return _context2.abrupt("return", sanity.fetch(unfilteredQuery));
1007
+ case 1:
990
1008
  case "end":
991
1009
  return _context2.stop();
992
1010
  }
993
1011
  }
994
1012
  }, _callee2);
995
1013
  }))),
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;
1014
+ unfilteredData = _usePlasmicQueryData.data;
1015
+ var generateFilteredQuery = function generateFilteredQuery() {
1016
+ if (!hasFilter || !unfilteredData) {
1017
+ return null;
1018
+ }
1019
+ var fieldValues = Object.values(unfilteredData).flatMap(function (model) {
1020
+ return Array.isArray(model) ? model : [model];
1021
+ }).map(function (item) {
1022
+ var field = Object.entries(item).find(function (el) {
1023
+ return el[0] === filterField;
1024
+ });
1025
+ return field == null ? void 0 : field[1];
1026
+ });
1027
+ var query = "*[_type=='" + docType + "'";
1028
+ if (fieldValues.some(function (v) {
1029
+ return typeof v === "string";
1030
+ })) {
1031
+ query = query + " && " + filterField + " " + filterParameter + " \"" + filterValue + "\"";
1032
+ } else {
1033
+ query = query + " && " + filterField + " " + filterParameter + " " + filterValue;
1034
+ }
1035
+ if (limit) {
1036
+ query = query + "][0..." + limit + "]";
1037
+ } else {
1038
+ query = query + "]";
1039
+ }
1040
+ console.log("FILTERED GROQ", query);
1041
+ return query;
1042
+ };
1043
+ var filteredQuery = generateFilteredQuery();
1044
+ var _usePlasmicQueryData2 = usePlasmicQueryData(filteredQuery ? JSON.stringify({
1045
+ filteredQuery: filteredQuery,
1046
+ creds: creds
1047
+ }) : null, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee3() {
1048
+ var resp;
999
1049
  return runtime_1.wrap(function _callee3$(_context3) {
1000
1050
  while (1) {
1001
1051
  switch (_context3.prev = _context3.next) {
1002
1052
  case 0:
1003
- if (!(!docType && !filterField && !filterValue && !filterParameter && !response)) {
1004
- _context3.next = 2;
1005
- break;
1006
- }
1007
- return _context3.abrupt("return", null);
1053
+ _context3.next = 2;
1054
+ return sanity.fetch(filteredQuery);
1008
1055
  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
1056
  resp = _context3.sent;
1038
1057
  return _context3.abrupt("return", resp);
1039
- case 10:
1058
+ case 4:
1040
1059
  case "end":
1041
1060
  return _context3.stop();
1042
1061
  }
@@ -1045,15 +1064,24 @@ function SanityFetcher(_ref2) {
1045
1064
  }))),
1046
1065
  filteredData = _usePlasmicQueryData2.data;
1047
1066
  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.");
1067
+ return React.createElement("div", {
1068
+ className: className
1069
+ }, "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
1070
  }
1050
1071
  setControlContextData == null ? void 0 : setControlContextData({
1051
1072
  docTypes: docTypes
1052
1073
  });
1053
- if (!response) {
1054
- return React.createElement("div", null, "Please specify a valid GROQ query or select a Document type.");
1074
+ if (!groq && !docType) {
1075
+ return React.createElement("div", {
1076
+ className: className
1077
+ }, "Please specify a valid GROQ query or select a Document type.");
1055
1078
  }
1056
- var sanityFields = response.map(function (item) {
1079
+ if (!unfilteredData) {
1080
+ return React.createElement("div", {
1081
+ className: className
1082
+ }, "Loading...");
1083
+ }
1084
+ var sanityFields = unfilteredData.map(function (item) {
1057
1085
  var fields = Object.keys(item).filter(function (field) {
1058
1086
  var value = get(item, field);
1059
1087
  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 +1089,7 @@ function SanityFetcher(_ref2) {
1061
1089
  return fields;
1062
1090
  });
1063
1091
  var operators;
1064
- var matchedFields = Object.values(response).flatMap(function (model) {
1092
+ var matchedFields = Object.values(unfilteredData).flatMap(function (model) {
1065
1093
  return Array.isArray(model) ? model : [model];
1066
1094
  }).map(function (item) {
1067
1095
  var fields = Object.entries(item).find(function (el) {
@@ -1077,10 +1105,10 @@ function SanityFetcher(_ref2) {
1077
1105
  } else if (typeof item[1] !== "number" && typeof item[1] !== "object" && typeof item[1] === "string") {
1078
1106
  operators = [{
1079
1107
  value: "==",
1080
- label: "Equality"
1108
+ label: "Equals"
1081
1109
  }, {
1082
1110
  value: "!=",
1083
- label: "Inequality"
1111
+ label: "Not equals"
1084
1112
  }];
1085
1113
  }
1086
1114
  });
@@ -1089,65 +1117,48 @@ function SanityFetcher(_ref2) {
1089
1117
  docTypes: docTypes,
1090
1118
  sanityFields: sanityFields[0]
1091
1119
  });
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");
1120
+ if (hasFilter) {
1121
+ if (!filterParameter) {
1122
+ return React.createElement("div", {
1123
+ className: className
1124
+ }, "Please specify a filter operation");
1125
+ }
1126
+ if (!filterValue) {
1127
+ return React.createElement("div", {
1128
+ className: className
1129
+ }, "Please specify a filter value");
1130
+ }
1100
1131
  }
1101
- if (!filterField && filterParameter && !filterValue) {
1102
- return React.createElement("div", null, "Please specify a Filter Field and a Filter Value");
1132
+ if (hasFilter && !filteredData) {
1133
+ return React.createElement("div", {
1134
+ className: className
1135
+ }, "Loading...");
1103
1136
  }
1104
- var repElements;
1137
+ var resultData = hasFilter ? filteredData : unfilteredData;
1105
1138
  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));
1139
+ var repElements = noAutoRepeat ? children : resultData.map(function (item, index) {
1140
+ Object.keys(item).forEach(function (field) {
1141
+ if (item[field]._type === "image") {
1142
+ item[field].imgUrl = imageBuilder.image(item[field]).ignoreImageParams().toString();
1143
+ }
1146
1144
  });
1147
- }
1145
+ return docType ? React.createElement(DataProvider, {
1146
+ key: item._id,
1147
+ name: "sanityItem",
1148
+ data: item,
1149
+ hidden: true
1150
+ }, React.createElement(DataProvider, {
1151
+ name: makeDataProviderName(docType),
1152
+ data: item
1153
+ }, repeatedElement(index, children))) : React.createElement(DataProvider, {
1154
+ key: item._id,
1155
+ name: "sanityItem",
1156
+ data: item
1157
+ }, repeatedElement(index, children));
1158
+ });
1148
1159
  return React.createElement(DataProvider, {
1149
1160
  name: "sanityItems",
1150
- data: response
1161
+ data: resultData
1151
1162
  }, noLayout ? React.createElement(React.Fragment, null, " ", repElements, " ") : React.createElement("div", {
1152
1163
  className: className
1153
1164
  }, " ", repElements, " "));