sfc-utils 1.4.67 → 1.4.69
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.
- package/components/geocoder.mjs +12 -2
- package/package.json +2 -2
- package/settings.js +129 -106
package/components/geocoder.mjs
CHANGED
|
@@ -23,8 +23,9 @@ const Geocoder = ({
|
|
|
23
23
|
filterRegion, // You need to test results, but could also pass in a neighbourhood, district, city, county, state or administrative area
|
|
24
24
|
market, // Will filter by the market's state if no filterRegion provided
|
|
25
25
|
resultFunc,
|
|
26
|
-
buttonTrackingId,
|
|
26
|
+
// buttonTrackingId, // To be used for analytics once system is more finalized
|
|
27
27
|
placeholder,
|
|
28
|
+
inputValueOverride, // Used to clear/change the input value from the parent component
|
|
28
29
|
}) => {
|
|
29
30
|
// Show a loader when we're requesting
|
|
30
31
|
const [loading, setLoading] = useState(false);
|
|
@@ -66,7 +67,9 @@ const Geocoder = ({
|
|
|
66
67
|
// POST as form url encoded data
|
|
67
68
|
let formData = new FormData();
|
|
68
69
|
formData.append("query", query);
|
|
69
|
-
|
|
70
|
+
if(filterRegion != "United States"){
|
|
71
|
+
formData.append("region", filterRegion);
|
|
72
|
+
}
|
|
70
73
|
// Remove any existing event listeners
|
|
71
74
|
setSingletonEventListener("keydown");
|
|
72
75
|
// Make req
|
|
@@ -176,6 +179,13 @@ const Geocoder = ({
|
|
|
176
179
|
}
|
|
177
180
|
};
|
|
178
181
|
|
|
182
|
+
// If the parent component passes in a string for inputValueOverride, use it
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
if (typeof inputValueOverride === 'string' || inputValueOverride instanceof String) {
|
|
185
|
+
setInputValue(inputValueOverride)
|
|
186
|
+
}
|
|
187
|
+
}, [inputValueOverride])
|
|
188
|
+
|
|
179
189
|
return (
|
|
180
190
|
<div className={geocoderStyles.wrapper}>
|
|
181
191
|
<div className={geocoderStyles.icon} />
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfc-utils",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.69",
|
|
4
4
|
"author": "ewagstaff <evanjwagstaff@gmail.com>",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"archieml": "^0.4.2",
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
"react-transition-group": "^4.4.5",
|
|
15
15
|
"write": "^2.0.0"
|
|
16
16
|
}
|
|
17
|
-
}
|
|
17
|
+
}
|
package/settings.js
CHANGED
|
@@ -1,120 +1,143 @@
|
|
|
1
|
-
|
|
2
1
|
/* Handle the data/processing for the Hearst analytics and paywall configuration */
|
|
3
2
|
let projectConfig;
|
|
4
3
|
try {
|
|
5
|
-
|
|
6
|
-
} catch (err){
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
projectConfig = require("../../project-config.json");
|
|
5
|
+
} catch (err) {
|
|
6
|
+
try {
|
|
7
|
+
projectConfig = require("../../project.json");
|
|
8
|
+
} catch (err) {
|
|
9
|
+
// It's ok
|
|
10
|
+
}
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
// Get settings off story_settings if it exists, otherwise fall back to projectConfig
|
|
15
|
-
let getSettings = function(){
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
14
|
+
let getSettings = function () {
|
|
15
|
+
if (!projectConfig) {
|
|
16
|
+
let settings = {
|
|
17
|
+
PROJECT: {
|
|
18
|
+
DATE: "January 1, 1900 9:00 AM",
|
|
19
|
+
MOD_DATE: "January 1, 1901 9:00 AM",
|
|
20
|
+
},
|
|
21
|
+
}; // Making this demo date SUPER wrong so we can catch it
|
|
22
|
+
return settings;
|
|
23
|
+
}
|
|
24
|
+
let projectSettings = projectConfig.PROJECT;
|
|
25
|
+
let settings = projectConfig;
|
|
26
|
+
// This needs to be set even if the "try" below fails
|
|
27
|
+
settings.PROJECT["ANALYTICS_CREDIT"] = "";
|
|
28
|
+
settings.PROJECT["KEY_SUBJECTS"] = "";
|
|
29
|
+
// Populate with storySettings if they exist
|
|
30
|
+
let storySettings;
|
|
31
|
+
let fullAuthors = [];
|
|
32
|
+
try {
|
|
30
33
|
try {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
34
|
+
[storySettings] = require("../../src/data/story_settings.sheet.json");
|
|
35
|
+
// Uncomment line below and comment out line above if testing from example folder in utils
|
|
36
|
+
// [storySettings] = require("./example/src/data/story_settings.sheet.json")
|
|
37
|
+
|
|
38
|
+
// If we got story_settings, try structuring the AUTHORS object
|
|
39
|
+
let authorNames = [];
|
|
40
|
+
let authorLinks = [];
|
|
41
|
+
try {
|
|
42
|
+
if (storySettings.Byline) {
|
|
43
|
+
authorNames = storySettings.Byline.split(",");
|
|
44
|
+
}
|
|
45
|
+
if (storySettings.Byline_Link) {
|
|
46
|
+
authorLinks = storySettings.Byline_Link.split(",");
|
|
47
|
+
}
|
|
48
|
+
for (let i in authorNames) {
|
|
49
|
+
fullAuthors.push({
|
|
50
|
+
AUTHOR_NAME: authorNames[i],
|
|
51
|
+
AUTHOR_PAGE: authorLinks[i] || "",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
} catch (err) {
|
|
55
|
+
// It's ok, we'll fall back
|
|
56
|
+
}
|
|
57
|
+
} catch (err) {
|
|
58
|
+
try {
|
|
59
|
+
// May be an Archie doc, try grabbing from there
|
|
60
|
+
storySettings = require("../../data/project_data.json").story_settings;
|
|
61
|
+
} catch (err) {
|
|
62
|
+
// hacking this to bypass??
|
|
63
|
+
// Evan: This hack has my approval
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Empty array is triggering truthy test, so let's nullify
|
|
67
|
+
if (fullAuthors.length === 0) {
|
|
68
|
+
fullAuthors = null;
|
|
63
69
|
}
|
|
64
|
-
// Empty array is triggering truthy test, so let's nullify
|
|
65
|
-
if (fullAuthors.length === 0){
|
|
66
|
-
fullAuthors = null
|
|
67
|
-
}
|
|
68
70
|
// Populate with sheet settings
|
|
69
71
|
settings = {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
72
|
+
PAYWALL_SETTING: storySettings.Paywall,
|
|
73
|
+
EMBEDDED: projectConfig.EMBEDDED,
|
|
74
|
+
GOOGLE_SHEETS: projectConfig.GOOGLE_SHEETS,
|
|
75
|
+
GOOGLE_DOCS: projectConfig.GOOGLE_DOCS,
|
|
76
|
+
MAIN_DOMAIN: projectConfig.MAIN_DOMAIN,
|
|
77
|
+
PROJECT: {
|
|
78
|
+
SUBFOLDER: storySettings.Year,
|
|
79
|
+
SLUG: storySettings.Slug,
|
|
80
|
+
TITLE: storySettings.SEO_Title,
|
|
81
|
+
DISPLAY_TITLE: storySettings.Title,
|
|
82
|
+
SOCIAL_TITLE: storySettings.Social_Title,
|
|
83
|
+
DECK: storySettings.Deck,
|
|
84
|
+
URL: "https://projects.sfchronicle.com",
|
|
85
|
+
IMAGE:
|
|
86
|
+
"https://s.hdnux.com/photos/0/0/0/0/" +
|
|
87
|
+
storySettings.Social_ImageID +
|
|
88
|
+
"/1/rawImage.jpg",
|
|
89
|
+
DESCRIPTION: storySettings.SEO_Description,
|
|
90
|
+
TWITTER_TEXT: storySettings.Twitter_Text,
|
|
91
|
+
DATE: storySettings.Publish_Date,
|
|
92
|
+
MOD_DATE: storySettings.Mod_Date || storySettings.LastModDate_C2P,
|
|
93
|
+
AUTHORS: fullAuthors || projectSettings.AUTHORS,
|
|
94
|
+
ANALYTICS_CREDIT: storySettings.Analytics_Credit,
|
|
95
|
+
HEARST_CATEGORY:
|
|
96
|
+
storySettings.Category || storySettings.Analytics_Section || "News",
|
|
97
|
+
KEY_SUBJECTS: storySettings.Key_Subjects || "",
|
|
98
|
+
MARKET_KEY: storySettings.Market_Key,
|
|
99
|
+
// Surveys have slightly different naming, so catch that below for backwards compat
|
|
100
|
+
NEWSLETTER_ID:
|
|
101
|
+
storySettings.NewsletterID ||
|
|
102
|
+
storySettings.Custom_Sailthru_ID ||
|
|
103
|
+
projectSettings.NEWSLETTER_ID,
|
|
104
|
+
NEWSLETTER_PROMO:
|
|
105
|
+
storySettings.NewsletterPromo ||
|
|
106
|
+
storySettings.Custom_Signup_Text ||
|
|
107
|
+
projectSettings.NEWSLETTER_PROMO,
|
|
108
|
+
NEWSLETTER_LEGAL:
|
|
109
|
+
storySettings.NewsletterLegal ||
|
|
110
|
+
storySettings.TOS_Text ||
|
|
111
|
+
projectSettings.NEWSLETTER_LEGAL,
|
|
112
|
+
// Newer things
|
|
113
|
+
RELATED_LINKS_HED: storySettings.Related_Links_Hed,
|
|
114
|
+
SECTION:
|
|
115
|
+
storySettings.Section ||
|
|
116
|
+
storySettings.Category ||
|
|
117
|
+
storySettings.Analytics_Section,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
} catch (err) {
|
|
121
|
+
// It's ok, we'll use project data
|
|
122
|
+
}
|
|
105
123
|
|
|
106
|
-
|
|
124
|
+
// Check if we need a slash
|
|
107
125
|
let slash = "";
|
|
108
|
-
if (settings.PROJECT.SUBFOLDER){
|
|
109
|
-
|
|
126
|
+
if (settings.PROJECT.SUBFOLDER) {
|
|
127
|
+
slash = "/";
|
|
110
128
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
129
|
+
settings.PROJECT["OPT_SLASH"] = slash;
|
|
130
|
+
// Set the canonical (either from the sheet override or constructed)
|
|
131
|
+
settings.PROJECT["CANONICAL_URL"] =
|
|
132
|
+
projectConfig.MAIN_DOMAIN +
|
|
133
|
+
"/" +
|
|
134
|
+
settings.PROJECT.SUBFOLDER +
|
|
135
|
+
slash +
|
|
136
|
+
settings.PROJECT.SLUG;
|
|
137
|
+
if (typeof storySettings !== "undefined" && storySettings.Canonical_URL) {
|
|
138
|
+
settings.PROJECT["CANONICAL_URL"] = storySettings.Canonical_URL;
|
|
139
|
+
}
|
|
140
|
+
return settings;
|
|
141
|
+
};
|
|
119
142
|
|
|
120
|
-
module.exports = { getSettings }
|
|
143
|
+
module.exports = { getSettings };
|