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