Skip to content

Commit

Permalink
feat: @sanity/google-maps-input (standalone) for Sanity Studio v2
Browse files Browse the repository at this point in the history
  • Loading branch information
snorrees committed Nov 23, 2022
1 parent bc047a0 commit e4d5f3b
Show file tree
Hide file tree
Showing 29 changed files with 16,569 additions and 16,166 deletions.
2 changes: 1 addition & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ lib
lint-staged.config.js
*.md
*.yml
*.js
dts
23 changes: 23 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"root": true,
"env": {
"node": true,
"browser": true
},
"globals": {
"google": true
},
"extends": [
"sanity",
"sanity/typescript",
"sanity/react",
"plugin:react-hooks/recommended",
"plugin:prettier/recommended"
],
"rules": {
"react/require-default-props": "off",
"react/no-unused-prop-types": "off",
"react/prop-types": "off",
"react/default-props-match-prop-types": "off"
}
}
45 changes: 0 additions & 45 deletions .eslintrc.js

This file was deleted.

152 changes: 129 additions & 23 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,27 +1,133 @@
name: CI
---
name: CI & Release

# Workflow name based on selected inputs. Fallback to default Github naming when expression evaluates to empty string
run-name: >-
${{
inputs.release && inputs.test && format('Build {0} ➤ Test ➤ Publish to NPM', github.ref_name) ||
inputs.release && !inputs.test && format('Build {0} ➤ Skip Tests ➤ Publish to NPM', github.ref_name) ||
github.event_name == 'workflow_dispatch' && inputs.test && format('Build {0} ➤ Test', github.ref_name) ||
github.event_name == 'workflow_dispatch' && !inputs.test && format('Build {0} ➤ Skip Tests', github.ref_name) ||
''
}}
on:
- push
- pull_request
# Build on pushes branches that have a PR (including drafts)
pull_request:
# Build on commits pushed to branches without a PR if it's in the allowlist
push:
branches: [main,studio-v2]
# https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow
workflow_dispatch:
inputs:
test:
description: Run tests
required: true
default: true
type: boolean
release:
description: Release new version
required: true
default: false
type: boolean

concurrency:
# On PRs builds will cancel if new pushes happen before the CI completes, as it defines `github.head_ref` and gives it the name of the branch the PR wants to merge into
# Otherwise `github.run_id` ensures that you can quickly merge a queue of PRs without causing tests to auto cancel on any of the commits pushed to main.
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
test:
runs-on: ${{ matrix.platform }}
name: Node.js ${{ matrix.node-version }} / ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
node-version:
- 14
log-the-inputs:
name: Log inputs
runs-on: ubuntu-latest
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
- run: |
echo "Inputs: $INPUTS"
env:
INPUTS: ${{ toJSON(inputs) }}
build:
runs-on: ubuntu-latest
name: Lint & Build
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3
- uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
with:
cache: npm
node-version: lts/*
- run: npm ci
# Linting can be skipped
- run: npm run lint --if-present
if: github.event.inputs.test != 'false'
# But not the build script, as semantic-release will crash if this command fails so it makes sense to test it early
- run: npm run prepublishOnly --if-present

# test:
# needs: build
# # The test matrix can be skipped, in case a new release needs to be fast-tracked and tests are already passing on main
# if: github.event.inputs.test != 'false'
# runs-on: ${{ matrix.os }}
# name: Node.js ${{ matrix.node }} / ${{ matrix.os }}
# strategy:
# # A test failing on windows doesn't mean it'll fail on macos. It's useful to let all tests run to its completion to get the full picture
# fail-fast: false
# matrix:
# # Run the testing suite on each major OS with the latest LTS release of Node.js
# os: [macos-latest, ubuntu-latest, windows-latest]
# node: [lts/*]
# # It makes sense to also test the oldest, and latest, versions of Node.js, on ubuntu-only since it's the fastest CI runner
# include:
# - os: ubuntu-latest
# # Test the oldest LTS release of Node that's still receiving bugfixes and security patches, versions older than that have reached End-of-Life
# node: lts/-2
# - os: ubuntu-latest
# # Test the actively developed version that will become the latest LTS release next October
# node: current
# steps:
# # It's only necessary to do this for windows, as mac and ubuntu are sane OS's that already use LF
# - name: Set git to use LF
# if: matrix.os == 'windows-latest'
# run: |
# git config --global core.autocrlf false
# git config --global core.eol lf
# - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3
# - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
# with:
# cache: npm
# node-version: ${{ matrix.node }}
# - run: npm i
# - run: npm test --if-present

release:
# needs: [build, test]
needs: [build]
# only run if opt-in during workflow_dispatch
if: always() && github.event.inputs.release == 'true' && needs.build.result != 'failure' && needs.test.result != 'failure' && needs.test.result != 'cancelled'
runs-on: ubuntu-latest
name: Semantic release
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3
with:
# Need to fetch entire commit history to
# analyze every commit since last release
fetch-depth: 0
- uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run lint
- run: npm run build
#- run: npm test
cache: npm
node-version: lts/*
- run: npm ci
# Branches that will release new versions are defined in .releaserc.json
- run: npx semantic-release
# Don't allow interrupting the release step if the job is cancelled, as it can lead to an inconsistent state
# e.g. git tags were pushed but it exited before `npm publish`
if: always()
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
# Re-run semantic release with rich logs if it failed to publish for easier debugging
- run: npx semantic-release --dry-run --debug
if: failure()
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }}
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@
.idea/
*.iml

.parcel-cache
.parcel-cache

dts
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
legacy-peer-deps=true
4 changes: 4 additions & 0 deletions .releaserc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"extends": "@sanity/semantic-release-preset",
"branches": ["main", {"name": "studio-v2", "channel": "studio-v2", "prerelease": "v2-studio"}]
}
76 changes: 2 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,93 +1,21 @@
# @sanity/google-maps-input

> **NOTE**
>
> This is the **Sanity Studio v3 version** of @sanity/google-maps-input.
>
> For the v2 version, please refer to the [v2-branch](https://github.com/sanity-io/sanity/tree/next/packages/%40sanity/google-maps-input).
## What is it?
Plugin for [Sanity Studio](https://www.sanity.io) providing input handlers for geo-related input types using Google Maps.

This plugin will replace the default `geopoint` input component.

![Google maps input](assets/google-maps-input.png)

## Know issues in Studio V3

* Diff-preview is not implemented.

These will be re-added well before Studio V3 GA.

## Installation

In your studio folder, run:

```
npm install --save @sanity/google-maps-input@studio-v3
```

or

```
yarn add @sanity/google-maps-input@studio-v3
```

## Usage

Add it as a plugin in sanity.config.ts (or .js), with a valid [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key):

```js
import { googleMapsInput } from "@sanity/google-maps-input";

export default createConfig({
// ...
plugins: [
googleMapsInput({
apiKey: "my-api-key"
})
]
})
sanity install @sanity/google-maps-input
```
Ensure that the key has access to:
* Google Maps JavaScript API
* Google Places API Web Service
* Google Static Maps API

And that the key allows web-access from the Studio URL(s) you are using the plugin in.

Note: This plugin will replace the default `geopoint` input component.
Then add a valid [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key) into ``./example/config/@sanity/google-maps-input.json``.

## Stuck? Get help

[![Slack Community Button](https://slack.sanity.io/badge.svg)](https://slack.sanity.io/)

Join [Sanity’s developer community](https://slack.sanity.io) or ping us [on twitter](https://twitter.com/sanity_io).

## License

MIT-licensed. See LICENSE.

## Develop & test

Make sure to run `npm run build` once, then run

```bash
npm run link-watch
```

In another shell, `cd` to your test studio and run:

```bash
npx yalc add @sanity/google-maps-input --link && yarn install
```

Now, changes in this repo will be automatically built and pushed to the studio,
triggering hotreload. Yalc avoids issues with react-hooks that are typical when using yarn/npm link.

### About build & watch

This plugin uses [@sanity/plugin-sdk](https://github.com/sanity-io/plugin-sdk)
with default configuration for build & watch scripts.


9 changes: 9 additions & 0 deletions config.dist.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"apiKey": null,
"defaultZoom": 11,
"defaultLocale": null,
"defaultLocation": {
"lat": 40.7058254,
"lng": -74.1180863
}
}

0 comments on commit e4d5f3b

Please sign in to comment.