Skip to content

Commit

Permalink
feat: Added ability to remove packages
Browse files Browse the repository at this point in the history
  • Loading branch information
JureSotosek committed Sep 16, 2018
1 parent e6b2151 commit 9d5225a
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 90 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ Use keyboard to search through package library.
Use up/down to select packages.
Use enter to select a package.
Use tab to move between search/suggestions.
When query is empty use backspace to remove packages.
Click space to trigger the install.
```

Expand Down
84 changes: 59 additions & 25 deletions src/emma.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@ class Emma extends Component {
this.handleQueryChange = this.handleQueryChange.bind(this);
this.handleInstall = this.handleInstall.bind(this);
this.handleTogglePackage = this.handleTogglePackage.bind(this);
this.fetchSearch = this.fetchSearch.bind(this);
this.fetchSuggestions = this.fetchSuggestions.bind(this);
}

componentDidMount() {
Expand Down Expand Up @@ -284,12 +286,13 @@ class Emma extends Component {
);
}

handleKeyPress(_, key) {
async handleKeyPress(_, key) {
const {
focused,
foundSearchPackages,
query,
foundSuggestionsPackages
foundSearchPackages,
foundSuggestionsPackages,
selectedPackages,
focused
} = this.state;

switch (key.name) {
Expand All @@ -308,9 +311,20 @@ class Emma extends Component {
});
}
break;

case 'space':
this.handleInstall();
break;

case 'backspace':
if (isEmpty(query)) {
await this.setState({
selectedPackages: selectedPackages.slice(0, -1)
});

this.fetchSuggestions();
}

default:
break;
}
Expand All @@ -322,10 +336,46 @@ class Emma extends Component {
return;
}

if (isEmpty(query)) {
this.setState({
query,
focused: FOCUSED_SUGGESTIONS
});
return;
}

await this.setState({
query
});

this.fetchSearch();
}

async handleTogglePackage(pkg) {
const { selectedPackages: selectedPackagesOld } = this.state;

const exists = selectedPackagesOld.some(
({ objectID }) => objectID === pkg.objectID
);

if (exists) {
return;
}

await this.setState({
query: '',
selectedPackages: [...selectedPackagesOld, pkg]
});

this.fetchSuggestions();
}

async fetchSearch() {
const { query } = this.state;

this.setState({
query,
loadingSearch: PROGRESS_LOADING,
focused: FOCUSED_SEARCH
focused: FOCUSED_SEARCH,
loadingSearch: PROGRESS_LOADING
});

try {
Expand All @@ -345,27 +395,11 @@ class Emma extends Component {
}
}

async handleTogglePackage(pkg) {
const { selectedPackages: selectedPackagesOld, focused } = this.state;
async fetchSuggestions() {
const { selectedPackages } = this.state;
const { dev: isDev } = this.props;

if (focused === FOCUSED_SEARCH) {
this.setState({
query: ''
});
}

const exists = selectedPackagesOld.some(
({ objectID }) => objectID === pkg.objectID
);

const selectedPackages = exists
? selectedPackagesOld.filter(({ objectID }) => objectID !== pkg.objectID)
: [...selectedPackagesOld, pkg];

this.setState({
query: '',
selectedPackages,
focused: FOCUSED_SUGGESTIONS,
loadingSuggestions: PROGRESS_LOADING
});
Expand Down
1 change: 1 addition & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const cli = meow(
Use up/down to select packages.
Use enter to select a package.
Use tab to move between search/suggestions.
When query is empty use backspace to remove packages.
Click space to trigger the install.
`,
{
Expand Down
4 changes: 2 additions & 2 deletions src/libs/npm-suggestions.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export const suggestionsQuery = gql`
name
}
humanDownloadsLast30Days
popular
objectID
}
devSuggestions {
name
Expand All @@ -36,7 +36,7 @@ export const suggestionsQuery = gql`
name
}
humanDownloadsLast30Days
popular
objectID
}
}
}
Expand Down
68 changes: 5 additions & 63 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -641,19 +641,6 @@ anymatch@^1.3.0:
micromatch "^2.1.5"
normalize-path "^2.0.0"

apollo-boost@^0.1.16:
version "0.1.16"
resolved "https://registry.yarnpkg.com/apollo-boost/-/apollo-boost-0.1.16.tgz#77f73a30c49ab6d749ddc3e5683a7e322c15f07d"
dependencies:
apollo-cache "^1.1.17"
apollo-cache-inmemory "^1.2.10"
apollo-client "^2.4.2"
apollo-link "^1.0.6"
apollo-link-error "^1.0.3"
apollo-link-http "^1.3.1"
apollo-link-state "^0.4.0"
graphql-tag "^2.4.2"

apollo-cache-inmemory@^1.2.10:
version "1.2.10"
resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.2.10.tgz#362d6c36cfd815a309b966f71e5d2b6c770c7989"
Expand Down Expand Up @@ -688,40 +675,27 @@ apollo-link-dedup@^1.0.0:
dependencies:
apollo-link "^1.2.3"

apollo-link-error@^1.0.3:
version "1.1.1"
resolved "https://registry.yarnpkg.com/apollo-link-error/-/apollo-link-error-1.1.1.tgz#69d7124d4dc11ce60f505c940f05d4f1aa0945fb"
dependencies:
apollo-link "^1.2.3"

apollo-link-http-common@^0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.5.tgz#d094beb7971523203359bf830bfbfa7b4e7c30ed"
dependencies:
apollo-link "^1.2.3"

apollo-link-http@^1.3.1, apollo-link-http@^1.5.5:
apollo-link-http@^1.5.5:
version "1.5.5"
resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.5.tgz#7dbe851821771ad67fa29e3900c57f38cbd80da8"
dependencies:
apollo-link "^1.2.3"
apollo-link-http-common "^0.2.5"

apollo-link-state@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/apollo-link-state/-/apollo-link-state-0.4.2.tgz#ac00e9be9b0ca89eae0be6ba31fe904b80bbe2e8"
dependencies:
apollo-utilities "^1.0.8"
graphql-anywhere "^4.1.0-alpha.0"

apollo-link@^1.0.0, apollo-link@^1.0.6, apollo-link@^1.2.3:
apollo-link@^1.0.0, apollo-link@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.3.tgz#9bd8d5fe1d88d31dc91dae9ecc22474d451fb70d"
dependencies:
apollo-utilities "^1.0.0"
zen-observable-ts "^0.8.10"

apollo-utilities@1.0.21, apollo-utilities@^1.0.0, apollo-utilities@^1.0.21, apollo-utilities@^1.0.8:
apollo-utilities@1.0.21, apollo-utilities@^1.0.0, apollo-utilities@^1.0.21:
version "1.0.21"
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.21.tgz#cb8b5779fe275850b16046ff8373f4af2de90765"
dependencies:
Expand Down Expand Up @@ -1759,13 +1733,13 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"

graphql-anywhere@^4.1.0-alpha.0, graphql-anywhere@^4.1.19:
graphql-anywhere@^4.1.19:
version "4.1.19"
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.19.tgz#5f6ca3b58218e5449f4798e3c6d942fcd2fef082"
dependencies:
apollo-utilities "^1.0.21"

graphql-tag@^2.4.2, graphql-tag@^2.9.2:
graphql-tag@^2.9.2:
version "2.9.2"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.9.2.tgz#2f60a5a981375f430bf1e6e95992427dc18af686"

Expand Down Expand Up @@ -2180,10 +2154,6 @@ js-tokens@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"

"js-tokens@^3.0.0 || ^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"

js-yaml@^3.9.0:
version "3.11.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
Expand Down Expand Up @@ -2338,12 +2308,6 @@ loose-envify@^1.0.0, loose-envify@^1.3.1:
dependencies:
js-tokens "^3.0.0"

loose-envify@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
dependencies:
js-tokens "^3.0.0 || ^4.0.0"

loud-rejection@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
Expand Down Expand Up @@ -2867,13 +2831,6 @@ prop-types@^15.5.10:
loose-envify "^1.3.1"
object-assign "^4.1.1"

prop-types@^15.6.2:
version "15.6.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
dependencies:
loose-envify "^1.3.1"
object-assign "^4.1.1"

proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
Expand Down Expand Up @@ -2934,15 +2891,6 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"

react@^16.5.1:
version "16.5.1"
resolved "https://registry.yarnpkg.com/react/-/react-16.5.1.tgz#8cb8e9f8cdcb4bde41c9a138bfbf907e66132372"
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
prop-types "^15.6.2"
schedule "^0.4.0"

read-pkg-up@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
Expand Down Expand Up @@ -3191,12 +3139,6 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"

schedule@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.4.0.tgz#fa20cfd0bfbf91c47d02272fd7096780d3170bbb"
dependencies:
object-assign "^4.1.1"

semantic-release@^12.4.1:
version "12.4.1"
resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-12.4.1.tgz#4faeee44fe7fbebbc7af8cc9e3522eb7877a0260"
Expand Down

0 comments on commit 9d5225a

Please sign in to comment.