Skip to content

Commit 7c70c10

Browse files
SaraVieiraCompuIves
authored andcommitted
Add ZEIT v1 warning (codesandbox#1391)
<!-- Is it a Bug fix, feature, docs update, ... --> **What kind of change does this PR introduce?** Feature <!-- You can also link to an open issue here --> **What is the current behavior?** No warning saying we only support version 1 of zeit <!-- if this is a feature change --> **What is the new behavior?** Adds a new warning for version 1 and also a way for people to say they want version 2 ![zeit2](https://user-images.githubusercontent.com/1051509/50238272-d4c32200-03b6-11e9-89b0-ef2af29504d0.gif) It also shows a notification saying your feedback was saved but that's not on the gif
1 parent 4a646ac commit 7c70c10

File tree

7 files changed

+142
-5
lines changed

7 files changed

+142
-5
lines changed

packages/app/src/app/pages/Sandbox/Editor/Workspace/items/Deployment/index.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@ import {
2424
class Deployment extends Component {
2525
componentDidMount = () => {
2626
this.props.signals.deployment.getDeploys();
27+
this.props.signals.deployment.getPeople();
2728
};
2829

2930
render() {
3031
const {
3132
signals,
3233
store: { user, deployment },
3334
} = this.props;
35+
36+
const hasVoted = deployment.peopleWant2.find(
37+
a => a.username === user.username
38+
);
3439
return (
3540
<div>
3641
<Description>
@@ -45,6 +50,50 @@ class Deployment extends Component {
4550
{!user.integrations.zeit &&
4651
' You need to add ZEIT to your integrations to deploy.'}
4752
</Description>
53+
<Description
54+
css={`
55+
margin: 0;
56+
padding: 0.5rem 1rem;
57+
58+
background: #122d42;
59+
`}
60+
>
61+
We currently only support Zeit v1.
62+
{!hasVoted && deployment.peopleWant2.length ? (
63+
<Fragment>
64+
<br />
65+
<br />
66+
If you would like us to support version 2.0 too please add your
67+
thumbs up
68+
</Fragment>
69+
) : null}
70+
<Button
71+
css={`
72+
padding: 5px 8px;
73+
margin-top: 1rem;
74+
`}
75+
block
76+
disabled={hasVoted || !deployment.peopleWant2.length}
77+
onClick={() =>
78+
signals.deployment.addPersonFor2({
79+
username: user.username,
80+
})
81+
}
82+
>
83+
{deployment.peopleWant2.length > 0
84+
? `${deployment.peopleWant2.length} people want v2`
85+
: null}{' '}
86+
<span
87+
css={`
88+
margin-left: 5px;
89+
`}
90+
role="img"
91+
aria-label="I want this"
92+
>
93+
👍
94+
</span>
95+
</Button>
96+
</Description>
4897

4998
{user.integrations.zeit ? (
5099
<Fragment>

packages/app/src/app/store/modules/deployment/actions.js

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { omit } from 'lodash-es';
2-
32
import getTemplate from 'common/templates';
43

54
export function createZip({ utils, state }) {
@@ -14,6 +13,61 @@ export function loadZip({ props, jsZip }) {
1413
return jsZip.loadAsync(file).then(result => ({ contents: result }));
1514
}
1615

16+
export async function getPeopleWhoWant2() {
17+
const Airtable = await import(/* webpackChunkName: 'airtable' */ '../../utils/setAirtable');
18+
19+
const base = await Airtable.default.base('apppgSmcJWwuXac6t');
20+
const params = base('zeit2').select({
21+
view: 'Grid view',
22+
maxRecords: 100000,
23+
});
24+
const people = [];
25+
26+
const getPeople = () =>
27+
new Promise(res => {
28+
params.eachPage(
29+
(records, fetchNextPage) => {
30+
records.forEach(record => {
31+
people.push(record);
32+
});
33+
fetchNextPage();
34+
},
35+
() => res()
36+
);
37+
});
38+
39+
await getPeople();
40+
41+
return {
42+
people: people.map(a => a.fields),
43+
};
44+
}
45+
46+
export async function addPersonWhoWant2({ path, props }) {
47+
const Airtable = await import(/* webpackChunkName: 'airtable' */ '../../utils/setAirtable');
48+
49+
const base = await Airtable.default.base('apppgSmcJWwuXac6t');
50+
51+
const AddPerson = () =>
52+
new Promise((res, rej) => {
53+
base('zeit2').create({ username: props.username }, err => {
54+
if (err) {
55+
console.error(err);
56+
rej();
57+
}
58+
res();
59+
});
60+
});
61+
62+
try {
63+
await AddPerson();
64+
65+
return path.success();
66+
} catch (e) {
67+
return path.error();
68+
}
69+
}
70+
1771
export async function createApiData({ props, state }) {
1872
const { contents } = props;
1973
const sandboxId = state.get('editor.currentId');

packages/app/src/app/store/modules/deployment/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as sequences from './sequences';
55
export default Module({
66
model,
77
state: {
8+
peopleWant2: [],
89
hasAlias: false,
910
deployToDelete: null,
1011
deploying: false,
@@ -14,10 +15,12 @@ export default Module({
1415
},
1516
signals: {
1617
getDeploys: sequences.getDeploys,
18+
addPersonFor2: sequences.addPersonFor2,
1719
deployClicked: sequences.deploy,
1820
deploySandboxClicked: sequences.openDeployModal,
1921
setDeploymentToDelete: sequences.deploymentToDelete,
2022
deleteDeployment: sequences.deleteDeployment,
2123
aliasDeployment: sequences.aliasDeployment,
24+
getPeople: sequences.getPeopleWhoWant2,
2225
},
2326
});

packages/app/src/app/store/modules/deployment/model.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,12 @@ const Deploy = types.model('Deploy', {
3939
type: types.enumeration('types', ['NPM', 'DOCKER', 'STATIC']),
4040
});
4141

42+
const People = types.model('Person', {
43+
username: types.maybeNull(types.string),
44+
});
45+
4246
export default {
47+
peopleWant2: types.array(People),
4348
hasAlias: types.boolean,
4449
deployToDelete: types.maybeNull(types.string),
4550
deploying: types.boolean,

packages/app/src/app/store/modules/deployment/sequences.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,32 @@ export const deploymentToDelete = [
1414
set(state`deployment.deployToDelete`, props`id`),
1515
];
1616

17+
export const getPeopleWhoWant2 = [
18+
actions.getPeopleWhoWant2,
19+
set(state`deployment.peopleWant2`, props`people`),
20+
];
21+
22+
export const addPersonFor2 = [
23+
actions.addPersonWhoWant2,
24+
{
25+
success: [
26+
actions.getPeopleWhoWant2,
27+
set(state`deployment.peopleWant2`, props`people`),
28+
addNotification('Your feedback has been saved', 'success'),
29+
],
30+
error: [
31+
addNotification(
32+
'An unknown error occurred when adding your vote',
33+
'error'
34+
),
35+
],
36+
},
37+
actions.getPeopleWhoWant2,
38+
set(state`deployment.peopleWant2`, props`people`),
39+
];
40+
1741
export const getDeploys = [
42+
actions.getDeploymentData,
1843
actions.getDeploymentData,
1944
set(state`deployment.gettingDeploys`, true),
2045
actions.getDeploys,

packages/app/src/app/store/utils/pushToAirtable.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import Airtable from 'airtable';
1+
import Airtable from './setAirtable';
22

3-
const base = new Airtable({ apiKey: 'keyJugfwdJzOyL7Aa' }).base(
4-
'appzdQFPct2p9gFZi'
5-
);
3+
const base = Airtable.base('appzdQFPct2p9gFZi');
64

75
export default ({ feedback, emoji, sandboxId, username, email }) =>
86
new Promise((resolve, reject) => {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Airtable from 'airtable';
2+
3+
export default new Airtable({ apiKey: 'keyJugfwdJzOyL7Aa' });

0 commit comments

Comments
 (0)