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