diff --git a/src/app/development/permits/Permit.js b/src/app/development/permits/Permit.js
index fe32726a..1e0429f6 100644
--- a/src/app/development/permits/Permit.js
+++ b/src/app/development/permits/Permit.js
@@ -143,7 +143,7 @@ const Permit = props => (
{formattedPermit.application_name}
{formattedPermit.permit_description}
-
{`City staff accepted this application on ${dateFormatter(formattedPermit.applied_date)}. ${currentStatusItem ? currentStatusItem.statusText : ''}`}
+
{`City staff began processing this application on ${dateFormatter(formattedPermit.applied_date)}. ${currentStatusItem ? currentStatusItem.statusText : ''}`}
{formattedPermit.trcType && formattedPermit.orderedDates.length > 0 &&
diff --git a/src/app/development/trc/textContent.js b/src/app/development/trc/textContent.js
index b47cd5f8..5715f1fd 100644
--- a/src/app/development/trc/textContent.js
+++ b/src/app/development/trc/textContent.js
@@ -90,13 +90,29 @@ export const devDashSections = [
),
},
{
- linkId: 'calendar',
- linkName: 'Neighborhood Meetings',
- header: 'Upcoming neighborhood meetings',
+ linkId: 'participate',
+ linkName: 'Get Involved',
+ header: 'How to get involved',
body: (
- Developers planning to submit applications for development that must go through the Technical Review Committee must hold a public meeting before submitting the application.
- Currently, developers are not required by law to notify the City of Asheville when those meetings take place. Thus, the first record the city has of a proposed development is when the application is submitted, after the meeting.
- However, in order to help ensure that residents can find out about neighborhood meetings in advance, the city has asked developers to voluntarily notify the city. After those developers fill out an online form, those meeting dates are automatically added to a calendar that shows all neighborhood meetings about which the city has been notified.
+ Depending on the type of project, there are a few different ways for community members to get involved in the development process.
+
+ -
+
Neighborhood meetings
+ Developers planning to submit applications for development that must go through the Technical Review Committee (including projects of types Level II, Major Subdivision, Conditional Zoning, and Conditional Use Permit) must hold a public meeting before submitting the application.
+ Currently, developers are not required by law to notify the City of Asheville when those meetings take place. Thus, the first record the city has of a proposed development is when the application is submitted, after the meeting.
+ However, in order to help ensure that residents can find out about developer-neighborhood meetings in advance, the city has asked developers to voluntarily notify the city. After those developers fill out an online form, those meeting dates are automatically added to a calendar that shows all developer-neighborhood meetings about which the city has been notified.
+
+ -
+
Committee and commission meetings
+ As described above, there are several committees and commissions that participate in the major development review processs. Depending on the size, type, and location of proposed development, it may go through the Technical Review Committee, the Planning and Zoning Commission, the Historic Resources Commission, the Asheville Downtown Commission, or the Asheville Area Riverfront Redevelopment Commission.
+ Visit AshevilleNC.gov to learn more about city boards, commissions, and committees.
+
+ -
+
Council meetings
+ Projects of types Conditional Zoning and Conditional Use Permit are reveiwed in a public hearing before City Council. Community members may speak as individuals for three minutes or on behalf of organizations for ten minutes (if three other people cede their speaking time) at a council meeting.
+ Information about City Council as well as minutes and agendas for upcoming and past council meetings can be found on the City of Asheville website.
+
+
)
},
{
@@ -208,7 +224,12 @@ trcProjectTypes['Major Subdivision'] = {
Creation or extension of a road
Usually creates new residential lots
),
- participationOpp: (),
+ participationOpp: (
+
+ ),
examples: (
- A new neighborhood with a new road created
),
@@ -227,14 +248,17 @@ trcProjectTypes['Level II'] = {
Not located downtown and contains 20 to 49 residential units or is 35,000 to 99,999 square feet
Located downtown and is 20,000 to 99,999 square feet
),
- participationOpp: (
- - Downtown:
-
- Neighborhood meeting
- Design review
- Planning and Zoning Commission
-
- - Not downtown:
-
- Neighborhood meeting
- Design review (if on the river)
-
-
),
+ participationOpp: (
+
+ ),
examples: (
- A new grocery store
- A big box specialty retailer
@@ -257,7 +281,14 @@ trcProjectTypes['Conditional Zoning'] = {
- 99,999 square feet or larger
- Includes all projects previously designated as Level III
),
- participationOpp: (- Neighborhood meeting
- Design review (if downtown or on the river)
- Planning and Zoning Commission
- City Council hearing
),
+ participationOpp: (
+ ),
examples: (
- A large apartment complex
- A large office building
@@ -275,7 +306,15 @@ trcProjectTypes['Conditional Use Permit'] = {
short: 'CUP',
descriptors: {
whyLevel: This is highly specialized permit process for land uses with potential public impacts that require individual consideration of their location, design, configuration and operation. These uses are defined by Section 7-16-2 of the Unified Development Ordinance.,
- participationOpp: (- Neighborhood meeting
- Design review (if downtown or on the river)
- Planning and Zoning Commission
- City Council hearing
),
+ participationOpp: (
+
+ ),
examples: (
- Cell phone towers
- Jails
@@ -419,20 +458,24 @@ export const dagreNodes = [
{
id: 'Design review',
steps: {
- what: ,
+ what: ,
who: ['dev', 'staff', 'neighbors'],
when: (
- Downtown Commission: second Friday of each month
- Riverfront Commission: second Thursday of each month
+ - Historic Resources Commission: second Wednesday of each month
),
where: (),
},
typeIds: [
'Level II',
'Major Subdivision',
+ 'Conditional Zoning',
+ 'Conditional Use Permit',
],
},
{
@@ -535,6 +578,8 @@ export const dagreLinks = [
target: 'Planning and Zoning Commission',
parallelEdges: [
{ id: 'Level II' },
+ { id: 'Conditional Zoning' },
+ { id: 'Conditional Use Permit' },
],
},
{
@@ -550,12 +595,6 @@ export const dagreLinks = [
parallelEdges: [
{ id: 'Level II' },
{ id: 'Major Subdivision' },
- ],
- },
- {
- source: 'Technical Review Committee',
- target: 'Planning and Zoning Commission',
- parallelEdges: [
{ id: 'Conditional Zoning' },
{ id: 'Conditional Use Permit' },
],
diff --git a/src/app/development/trc/utils.js b/src/app/development/trc/utils.js
index 4f25135b..bb6a998a 100644
--- a/src/app/development/trc/utils.js
+++ b/src/app/development/trc/utils.js
@@ -51,17 +51,29 @@ export function getNodes(dagreGraph, visWidth, nodeHeight, nodePadding) {
const midpointX = visWidth / 2;
// totalYOffsetValue has to be added to if there is a multi-row set of nodes
- // let totalYOffsetValue = 0;
+ let totalYOffsetValue = 0;
- return Object.values(dagreGraph._nodes).map((d) => {
+ const returnNodes = Object.values(dagreGraph._nodes).map((d) => {
const returnNode = Object.assign({}, d);
returnNode.coincidents = [].concat(Object.values(dagreGraph._nodes))
.filter(val => val.y === d.y);
returnNode.indexInCoincidents = returnNode.coincidents.findIndex(c => c.id === returnNode.id);
- returnNode.numPerRow = returnNode.coincidents.length <= 3 ?
- returnNode.coincidents.length : Math.ceil(returnNode.coincidents.length / 2);
+ // This logic allows for wrapping, but is unnecessary right now
+ // returnNode.numPerRow = returnNode.coincidents.length <= 3 ?
+ // returnNode.coincidents.length : Math.ceil(returnNode.coincidents.length / 2);
+ returnNode.numPerRow = returnNode.coincidents.length;
+
+ // Basically, lower the nodes after design review if the larger nodes are being used
+ returnNode.y += totalYOffsetValue;
+ if (returnNode.numPerRow > 2
+ && returnNode.indexInCoincidents === returnNode.coincidents.length - 1
+ && visWidth > 767
+ ) {
+ totalYOffsetValue += 125;
+ }
+ // Wrap is just the width-- this is an artefact of using the React Annotations library for an earlier draft
returnNode.wrap = (visWidth -
(nodePadding + (nodePadding * returnNode.numPerRow))
) / returnNode.numPerRow;
@@ -94,6 +106,8 @@ export function getNodes(dagreGraph, visWidth, nodeHeight, nodePadding) {
// d.yOffset = thisYOffset;
});
+ return returnNodes;
+
// Reiterate and update y values
// return nodeValues;
// .map((d) => {
diff --git a/src/styles/components/MajorDevelopmentDashboard.scss b/src/styles/components/MajorDevelopmentDashboard.scss
index 988b912c..e9327175 100644
--- a/src/styles/components/MajorDevelopmentDashboard.scss
+++ b/src/styles/components/MajorDevelopmentDashboard.scss
@@ -71,6 +71,25 @@ ul.sectionNav li {
margin: 0 auto;
}
+.paragraphy-list {
+ list-style: none;
+}
+
+.paragraphy-list h3 {
+ display: inline-block;
+}
+
+.paragraphy-list li::before {
+ content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */
+ color: #4077a5; /* Change the color */
+ font-weight: bolder; /* If you want it to be bold */
+ font-size: 1.5rem;
+ display: inline-block; /* Needed to add space between the bullet and the text */
+ width: 1em; /* Also needed for space (tweak if needed) */
+ margin-left: -1em; /* Also needed for space (tweak if needed) */
+}
+
+
@media(max-width: 767px){
#majorDevDash p, #majorDevDash p ~ ul {
width: 90%;